[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 ,