9.4 SqlParameter对象
一般来说,在更新DataTable或者是DataSet时,如果不采用SqlParameter对象,那么当输入的SQL语句出现歧义时,如字符串中含有单引号,程序就会发生错误,而且其他人可以轻易通过拼接SQL语句来进行注入攻击。
SqlParameter对象表示SqlCommand的参数,也可以是它到DataSet列的映射。SqlParameter类不能被继承。
9.4.1 创建SqlParameter对象
创建SqlParameter对象有两种方法:一种是使用SqlCommand对象的CreateParameter()方法;第二种是使用new关键字。通过new关键字创建SqlParameter对象时,SqlParameter对象有7种构造函数,常用的两种形式如下。
SqlParameter para = new SqlParameter(); SqlParameter para = new SqlParameter(string parameterName, object value);
使用第二种构造形式时需要传入两个参数,parameterName指定参数名,它是在SQL语句里要替换掉的名称;value表示一个任意数据库支持的类型对象,具体的类型系统自动判断。
【范例7】
创建SqlParameter对象,并在创建时指定参数名和参数值。代码如下。
SqlParameter para = new SqlParameter("@username", "张三");
9.4.2 SqlParameter对象的属性
SqlParameter对象包含一系列的属性和方法,如表9-7所示列举了该对象的常用属性。
表9-7 SqlParameter对象的常用属性
【范例8】
定义SqlParameter类型的数组,然后遍历该数组。在foreach语句进行遍历时,通过ParameterName获取参数的名称,SqlValue获取参数的值。代码如下。
SqlParameter[] parm = new SqlParameter[]{ //定义SqlParameter类型数组 new SqlParameter("name1", "张云"), //为指定变量赋值 new SqlParameter("name2", "许飞"), new SqlParameter("name3", "李遥遥"), }; foreach (SqlParameter item in parm) { Response.Write("获取到的SqlParameter对象的名称:" + item.ParameterName+ "<br/>"); Response.Write("获取到作为SQL类型参数的值:" + item.SqlValue+"<br/>"); Response.Write("==========================================<br/>"); }