当前位置:编程学习 > asp >>

[MrYoung教程:易学之道]4ADONET基础之参数化查询

一、前文回顾
  上文中我们讲解了数据库的增,修,删,查操作,并以一个例子引出了臭名昭著的SQL注入。

 二、概述
  这节课我们来讨论如何使用参数化查询来解决SQL注入的问题,并改写我们的所有方法。

三、主要内容
  3.1 参数化查询的优点。

  3.2 SqlCommand的属性。
  3.3 SqlDataAdapter 。

  3.4 总结。

四、优点
  防止SQL注入,通过给参数赋值,从而把整个参数都看做一个值去比较,ADO.NET会对一些特殊字符进行转义,而不是字符串拼接。

五、SqlCommand的属性
  5.1 SqlCommand.Connection 属性:获取或设置 SqlCommand的此实例使用的连接。
 
1             SqlConnection sqlcon = new SqlConnection(connectionString);2             SqlCommand sqlcom = new SqlCommand();3             sqlcom.Connection = sqlcon;
  5.2 SqlCommand.CommandText 属性:获取或设置要对数据源执行的 SQL 语句。
 
view sourceprint?1             sqlcom.CommandText = "select * from tb_user where UserName=@u and <A href=mailto:UserPassWord=@p";>UserPassWord=@p"; 

2 </A>

 
 
  5.3 SqlCommand.Parameters 属性:获取设置参数列表。表示相关联的参数的集合
 
view sourceprint?1 sqlcom.Parameters.Add("username", SqlDbType.VarChar, 50).Value = "MrYoung";

 
  上面则是为SQLCOM的PARAMETERS添加一个参数,这个参数的名称为username,SqlDbType.VarChar为参数的数据库字段类型为VARCHAR,长度为50。VALUE则是为这个参数赋值为MrYoung。

  接下来我们便分别改写我们的增,修,删方法分别如下:

 
view sourceprint?001 /// <summary>   

002   

003 /// 插入数据   

004   

005 /// </summary>   

006   

007 /// <param name="username"></param>   

008   

009 /// <param name="userpassword"></param>   

010   

011 /// <param name="userage"></param>   

012   

013 /// <param name="userphone"></param>   

014   

015 /// <param name="useraddress"></param>   

016   

017 public static void InsertData(string username,string userpassword,int userage,string userphone,string useraddress)   

018   

019 {   

020   

021     //实例化连接对象   

022   

023     using (SqlConnection sqlcon = new SqlConnection(connectionString))   

024   

025     {   

026   

027         //实例化SQLCOMMAND,注意为默认的空构造函数   

028   

029         using (SqlCommand sqlcom = new SqlCommand())   

030   

031         {   

032   

033             //指定他使用的SQLCONNECTION   

034   

035             sqlcom.Connection = sqlcon;   

036   

037             //设置查询语句   

038   

039             sqlcom.CommandText = "insert into tb_user values (@username,@userpassword,@userage,@userphone,@useraddress)";   

040   

041             //给Parameters添加参数并复制   

042   

043             sqlcom.Parameters.Add("username", SqlDbType.VarChar, 50).Value = username;   

044   

045             sqlcom.Parameters.Add("userpassword", SqlDbType.VarChar, 50).Value = userpassword;   

046   

047             sqlcom.Parameters.Add("userage", SqlDbType.Int, 4).Value = userage;   

048   

049             sqlcom.Parameters.Add("userphone", SqlDbType.VarChar, 50).Value = userphone;   

050   

051             sqlcom.Parameters.Add("useraddress", SqlDbType.VarChar, 50).Value = useraddress;   

052   

053             try 

054   

055             {   

056   

057     

058   

059                 sqlcon.Open();   

060   

061                 sqlcom.ExecuteNonQuery();   

062   

063             }   

064   

065             catch (Exception e1)   

066   

067             {   

068   

069                 sqlcon.Close();   

070   

071                 throw new Exception(e1.Message);   

072   

073             }   

074   

075     

076   

077         }   

078   

079     }   

080   

081 }   

082   

083     

084   

085     

086   

087 /// <summary>   

088   

089 /// 修改数据   

090   

091 /// </summary>   

092   

093 /// <param name="username"></param>   

094 

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,