1.数据访问层

using的用法:

01.可以using System;导命名控空间

02.using 的语法结构

using(变量类型  变量名 =new 变量类型())

{

}

案例:

03.using的原理

为什么出了using所在的{},会自动回收对象。

原因是当我们将要出{},系统自动调用了Dispose()方法。

而在DISpose方法中是这么实现的

2.哪些对象才可以使用Using回收!如:SqlConnection  Font 和File 也都可以使用using   因为他们实现了IDisposable接口

必须实现了IDisposable 接口的类型才可以使用using回收!

3.using回收的是托管还是非托管资源?

解析:什么是托管:所有的C#代码都是被CLR监管,

结论是using回收的是 非托管资源!

2.会实现参数化SQL

解析:username: ' or 1=1 --    pwd:sb

1.使用using释放资源

Using释放的是托管资源还是非托管资源?

解析:非托管,C#应用托管到.NET Framework.但是他可以释放非托管资源。

1.using用法:

01.有人问,什么样的的语句可以使用using管理??

官方人士解析:稀缺的资源,才需要using管理。接着有人问:what is less resource ?例如:Connection对象,IO流。

02.Dispose方法会自动调用Close()

要想让一个类型可以通过using管理,该类型或者父类必须实现了IDisposable接口。

using(SqlConnection con=new SqlConnection)

{

//本质上自动调用了Dispose方法

}

2.close()和dispose()区别?

解析:close()只是关闭连接,但是通道没有销毁,dispose()不仅把连接给关闭了,而且把通道也给销毁了。

2.会使用SqlParameter给SQL传递参数

1.又有人问,菜鸟写的程序,被SQL注入怎么办??

官方人士解析:

01.要想避免,就通过参数的方式,来书写SQL语句

02.通过存储过程,存储过程中使用参数

2.哪些年,童鞋们用过的@

解析:01.数据库中@@error:全局变量

@num:局部变量,程序员自己定义的变量

02.路径转义:@"D:\"

03.在SQL语句中进行参数化查询时,可以避免SQL注入

SqlParameter对象

在C#中获取存储过程的返回值

SqlParameter     para=new SqlParameter("@myresult",SqlDBType.Int);

para.Dirction=ParameterDirction.Output;

para.Value;

3.会使用ADO.NET调用存储过程,包括SqlHelper类的使用

无参的存储过程

带输入参数的存储过程

带输入和输出参数的存储过程

4.con.CrateCommand()的用法

5.SQL语句中参数化模糊查询写法

解析:like '%'+@name+'%'

private void btnOK_Click(object sender, EventArgs e)
{
string str = "Data Source=.;initial catalog=MySchool;uid=sa;pwd=6375196"; SqlConnection con = new SqlConnection(str);
string sql = "select * from student where studentname like '%'+@name+'%'";
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.Add(new SqlParameter("@name", txtName.Text));
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds, "Info");
dataGridView1.DataSource = ds.Tables[]; }

SQL注入

            //登录按钮 用户名和密码不对也可以成功登录
//1.1获取到用户名和密码
string uname = txtName.Text;
string pwd = txtPwd.Text;
//1.2发送SQL指令,拼接SQL方式
string str = "Data Source=.;Initial Catalog=MySchool;uid=sa;";
string sql = "select count(1) from student where studentName='" + uname + "' and Loginpwd='" + pwd + "'";
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > )
{
MessageBox.Show("成功登录!");
}
else
{
MessageBox.Show("失败!");
} //用户名输入 ' or 1=1 -- 密码输入 :随便输
//SQL Server 查询的语句是 select count(1) from student where studentName='' or 1=1 --' and Loginpwd='sb

为防止SQL注入

            //1.1获取到用户名和密码
string uname = txtName.Text;
string pwd = txtPwd.Text;
//1.2发送SQL指令,拼接SQL方式
string str = "Data Source=.;Initial Catalog=MySchool;uid=sa;";
string sql = "select count(1) from student where studentName=@name and loginpwd=@pwd";
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = new SqlCommand(sql, con); con.Open();
SqlParameter p1 = new SqlParameter("@name", uname);
SqlParameter p2 = new SqlParameter("@pwd", pwd);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
try
{
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > )
{
MessageBox.Show("成功登录!");
}
else
{
MessageBox.Show("失败!");
} }
catch (Exception)
{ // throw;
}

C#调用带输入参数的存储过程

数据库--->可编程性--->存储过程--->

//开始把Alter改成如下的create
create procedure usp_selectInfoOutput
@sex nvarchar(),
@count int output
as
select * from Student where gender=@sex
select @count=count() from student
where gender=@sex
return

按性别加载数据

在Main窗体中写

//1.1  连接字符串
string str = "data source=.;initial catalog=MySchool;uid=sa;";
//1.2 创建连接对象 呵呵
SqlConnection con = new SqlConnection(str);
//创建SqlCommand 对象的第二种方式
//从Con出发
//1.3 从连接对象构建命令对象
SqlCommand cmd = con.CreateCommand();
//1.4 给命令对象需要执行的SQL语句赋值
cmd.CommandText = "usp_selectInfo";
//告诉SQL引擎我传递过来的是 存储过程的名称
//1.5 我们告诉SQL引擎 我通过网线送过去的字符串是 一个存储过程的名字啊
cmd.CommandType = CommandType.StoredProcedure;
//1.6 构建存储过程的输入参数,并且给参数赋值,
//参数的名称必须和定义存储过程的输入参数名称完成相同
SqlParameter para = new SqlParameter("@sex", "");
//1.7 将参数和命令对象的参数集合绑定
cmd.Parameters.Add(para);
//1.8 打开数据库连接通道真正建立
con.Open();
//1.9 构建一个适配器 )卡车( 对象
SqlDataAdapter da = new SqlDataAdapter();
//1.10 将已经初始化好的cmd对象和da绑定
da.SelectCommand = cmd;
//1.11 构建内存中的数据集对象
DataSet ds = new DataSet();
//1.12 从DB 拎 数据到DataSet 中的一张表
da.Fill(ds, "StuInfo");
//1.13 将dgv的数据源指向表
dgvList.DataSource = ds.Tables["StuInfo"];
//1.14 连接关闭
con.Close();

同上

            string str = "Data Source=.;Initial Catalog=MySchool;uid=sa;";
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "usp_selectInfo";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter pare = new SqlParameter("@sex", "");
cmd.Parameters.Add(pare);
con.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "Info");
dgvList.DataSource = ds.Tables["Info"];
con.Close();

三: C#调用带输出和返回值的存储过程

在boy's number 的输出:5 在返回值:100 在  学生框中支持模糊查询 在dgvList控件输出查询的结果

数据库--->可编程性--->存储过程--->

create procedure usp_selectInfoOutput
@sex nvarchar(),
@count int output
as
select * from Student where gender=@sex
select @count=count() from student
where gender=@sex
return

在<调用带输出和返回值的存储过程>窗体里写

 //1.1  连接字符串
string str = "data source=.;initial catalog=MySchool;uid=sa;";
//1.2 创建连接对象 呵呵
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = con.CreateCommand(); cmd.CommandText = "usp_selectInfoOutput";
cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] paras =
{
new SqlParameter("@sex",""),
//凭什么 C# @count 输出参数
new SqlParameter("@count",SqlDbType.Int),
new SqlParameter("@myreturn",SqlDbType.Int)
//返回值
}; //为参数指定方向
paras[].Direction = ParameterDirection.Output;
paras[].Direction = ParameterDirection.ReturnValue;
cmd.Parameters.AddRange(paras);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "StuInfo"); dataGridView1.DataSource = ds.Tables["StuInfo"];
//填充总人数
txtNum.Text = paras[].Value.ToString();
txtReturn.Text = paras[].Value.ToString();

四:模糊查询  在Select控件中写

string name = '%' + "hhe" + '%';
//1.1 连接字符串
string str = "data source=.;initial catalog=MySchool;uid=sa;";
//1.2 创建连接对象 呵呵
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = con.CreateCommand();
//1.3 SQL脚本 like后直接跟@name
//cmd.CommandText = "select * from student where studentname like @name";
//cmd.CommandType = CommandType.Text;
//SqlParameter para = new SqlParameter("@name", '%' + txtName.Text + '%');
//同下三行代码效果一样
cmd.CommandText = "select * from student where studentname like '%'+@name+'%'";
cmd.CommandType = CommandType.Text;
SqlParameter para = new SqlParameter("@name", txtName.Text); cmd.Parameters.Add(para); SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "StuInfo");
dataGridView1.DataSource = ds.Tables["StuInfo"];

用SqlParameter 给SQL传递参数的更多相关文章

  1. Drupal如何SQL查询传递参数?

    Drupal使用称之为“placeholder”的方式处理SQL查询参数: <?php // WRONG: $result = db_query("SELECT nid, title ...

  2. WebService 实现BS环境与BS环境传递参数,根据参数生成txt文档

    客户端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client.as ...

  3. 【HOW】如何通过URL给Reporting Services报表传递参数

    [本地模式Reporting Services] 参见官方文档:http://msdn.microsoft.com/en-us/library/ms154042.aspx 示例:http://serv ...

  4. 转:Web页面通过URL地址传递参数常见问题及检测方法

    Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述 ...

  5. C# ADO.NET SqlDataAdapter中传递参数

    ADO.NET的SQL语句中,往往不是静态的语句,而是需要接受传递过来的参数,比如典型的登录功能,需要查找指定的用户名: string sqlQuery = "SELECT * FROM W ...

  6. Sqlparameter防SQL注入

    一.SQL注入的原因 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对 ...

  7. C#中SQL语句参数写法

    OracleConnection oc=new OracleConnection("data source=osserver;User Id=****;password=**"); ...

  8. SSM框架的sql中参数注入(#和$的区别)

    <select id="findUsersByUserName2" resultType="java.util.Map" parameterType=&q ...

  9. hive -f 传递参数

    hive -f 在执行sql脚本文件的时候是可以传递参数的,但是要注意hive版本: 注意:hive在0.9版本之前是不支持-f传递参数的,只有1.0之后才支持次功能. 使用如下: 1.创建sql脚本 ...

随机推荐

  1. Linux守护进程的编程实现(转)

    http://blog.csdn.net/zg_hover/article/details/2553321 http://blog.csdn.net/kongdefei5000/article/det ...

  2. .net经验积累

    希望对.net编程者有所帮助 1.学会配置环境变量  1.我的电脑-属性-环境变量-双击下面的path-粘贴路径  2.ctrl+r 输入软件名字按回车 2.常用vs2010快捷键  代码格式化:ct ...

  3. Bootstrap-用ICheck插件给CheckBox换新装

    直接来吧! 下面是添加上复选框以后的树形菜单效果: 这样看起来有种驴唇不对马嘴的感觉. 所以就要想办法给这些复选框添加1些样式,让全部界面看起来搭配1些. 通过查询得知,有个叫ICheck的第3方Bo ...

  4. REUSE_ALV_POPUP_TO_SELECT的使用技巧

    通过函数的方法弹出一个对话框,提供选择数据的功能…… DATA: BEGIN OF lt_exidv OCCURS , box TYPE char1, exidv TYPE exidv, status ...

  5. 响应式SharePoint模版页

    一张好的皮肤显然的会给你的项目加分不少.特别是大部分的项目,UI甚至可以决定成败. SharePoint在这方面一直都做得不好,曾经我有好多项目都是坐在美工旁边来一起修改样式.痛苦的经历. 不久以前, ...

  6. CentOS6.5上编译OpenJDK7源码

    本文地址:http://www.cnblogs.com/wuyudong/p/build-openjdk7.html,转载请注明源地址. 采用开源的OpenJDK版本,获取其源码的方式有两种: 通Me ...

  7. Java使用正则表达式获取文本的章节名称

    获取文本的章节,首先要确定章节的开始标准,一般中文的章节都是以“第”开头,第一章.第二章等.所以使用“^”字符来确定首位,但是很多时候章节前面会有空白字符,所有以“第”作为章节的开始,进行以下的匹配 ...

  8. java 之 对象与垃圾回收

    1.垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源) 2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行.当对象永久的失去引用后,系统会在合适的时 ...

  9. Android Studio 有用的插件

    从Eclipse切换到Android Studio 有一段时间了,发现as同,github,已经很多插件的集合有强大的合成效应. 安装插件请参考:http://blog.csdn.net/hyr839 ...

  10. jquery错误: Cannot read property ‘msie’ of undefined

    背景 Web application, 引用了jquery 1.10.2和fancybox 1.3.4 现象 访问页面遭遇Cannot read property ‘msie’ of undefine ...