ado的mysql参数化_ADO.NET 参数化查询

参数化查询

使用参数化查询的情景有很多,但最常用的情景是需要用户在查询中进行输入的情况。

有两种方法可供使用。第一,可以讲用户输入嵌入到查询字符串中,例如可能使用.NET Framework中的String.Format函数。

第二种方法是构造一种参数化查询。

在开始时执行如下所示的基本查询:

1 select count(*) fromUserInfo2

3

4      where UserName=‘{0}’ and PassWord=‘{1}’

然后利用用户的输入构造如下查询:

1 select count(*) fromUserInfo

2

3

4      where UserName=‘myUserName’ and PassWord=‘myPassWord’’

如果对正在执行的查询有一些了解,输入如下内容:NonUser' or 1=1 --,那么代码就会执行如下查询。

1 select count(*) fromUserInfo

2

3

4      where UserName=‘NonUser' or 1=1 --" and PassWord=‘myPassWord’’

双连字符在SQL Server的查询语法中特别重要。它表示:该行后面的内容是注释。换句话说,and PassWord=‘myPassWord’被忽略了。

现在,UserName=‘NonUser'并不成立,但where子句的另一半(1=1)对于所有行均成立。因此,该查询将成功执行。

使用参数化查询。

代码示例:

1        SqlConnectionStringBuilder connstr = newSqlConnectionStringBuilder();2

3 connstr.DataSource = "ZHANG-PC";4

5 connstr.InitialCatalog = "sq";6

7 connstr.IntegratedSecurity = true;8

9 using (SqlConnection conn = newSqlConnection(connstr.ConnectionString))10 {11

12 conn.Open();13

14 SqlCommand cmd = newSqlCommand();15

16 cmd.CommandText = "select count(*) from UserInfo where UserName=@username and PassWord=@password";17

18 cmd.Parameters.AddWithValue("@username","zyb12345");19

20 cmd.Parameters.AddWithValue("@password","654321");21

22 cmd.Connection =conn;23

24 SqlDataReader read =cmd.ExecuteReader();25

26 while(read.Read())27 {28

29 Console.WriteLine("userName:{0}", read.GetString(0));30

31 }32

33 conn.Close();34

35 }

在ADO.NET中执行一个参数化查询,需要向Command对象的Parameters集合中添加Parameters对象。生成Parameters最简单的方法是:

调用SqlCommand对象的Parameters集合的AddWithValue函数。

1 SqlCommand的Parameters集合中的AddWithValue方法。2

3 cmd.Parameters.AddWithValue("@username","zyb12345");4

5 cmd.Parameters.AddWithValue("@password","654321");

或者

1 SqlParameter[] p = new SqlParameter[2];2

3 p[0].ParameterName = "@username";4

5 p[0].Value = "zyb12345";6

7 p[1].ParameterName = "@password";8

9 p[1].Value = "654321";10

11 cmd.Parameters.AddRange(p);12

13 SqlDataReader read = cmd.ExecuteReader();

参数数据类型

可以设置SqlParameters对象的SqlDbType属性,以控制在向SQL Server数据库中传递参数信息时所使用的数据类型,即SqlDbType枚举中的值。

SqlDbType的枚举值有:Int,DateTime,Bit,Money,Image,NVarChar等,在下面的示例中,NVarChar对应的是.NET中的string类型。size(即15)代表字符串的长度,可根据需要设置size的值。

1 SqlParameter p;2 p = new qlParameter("@username",SqlDbType.NVarChar,15);3 p.Value = "zyb12345";

参数方向

在本例中Sqlparameters是输入参数,有时需要输出参数,这时就要设置SqlParameter的参数方向了。此时不需要设置Value属性。代码如下:

1 SqlParameter w;2

3 w = cmd.Parameters.Add("@username", SqlDbType.NVarChar);4

5 w.Direction =ParameterDirection.Output; //设置参数方向6

7 cmd.ExecuteNonQuery(); //执行语句8

9 Console.Write(w.Value);                   //获取输出值(执行完数据查询后才能获取Value值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值