创建更稳健的数据命令(参数化数据命令)

   在参数化数据命令中,使用参数作为占位符来替代硬编码的值。这些参数将被分别添加,并自动进行特殊字符的编码处理。例如下面的SQL语句: select * from customers where customerID='Alfki'  可以转换为一个参数化的sql语句:select * from customers where customerID=@customerID

        不同的数据提供程序,参数化数据命令的语法是不同的。对于sqlserver数据提供程序,参数化的数据命令是使用唯一的命名占位符作为参数。参数名可以任意选取,但是必须是以@字符开头。通常情况下我们是以字段名作为相应的参数名(比如上面的语句中使用@customerID作为customerID字段的参数名)。ole DB数据提供程序则采用了不同的语法。它要求每一个参数使用一个问号(?)来表示,在其sql语句中,参数并不是通过参数名来标识的,而是根据参数在sql语句中出现的位置来标识的。如下面:select * from customers where customerID=?

        无论用哪种方式来标识数据命令中的参数,都需要为sql语句中的每一个参数提供相应的Parameter对象,每一个Parameter对象都将被添加到Command.Parameters参数集合中。对于ole  DB数据提供程序,一定要按照参数在sql语句中出现的顺序来添加相应的Parameter对象。对于sql server数据提供程序来说,添加参数的顺序是无关紧要的,因为参数将根据参数名来匹配相应的占位符。

      protected void cmdInsert_Click(object sender, EventArgs e)

     {

          string insertSQL;

          insertSQL="insert into authors(";

          insertSQL+="au_id,au_fname,au_lname, contract ) ";

          insertSQL+="values(@au_id,@au_fname,@au_lname,@contract)";

          sqlConnection con=new sqlConnection(connectionstring);

          sqlCommand cmd=new sqlCommand(insertSQL,con);

          //添加相应的参数

          cmd.Parameters.AddWithValue("@au_id",txtID.text);

          cmd.Parameters.AddWithValue("@au_fname",txtFirstName.text); 

          cmd.Parameters.AddWithValue("@au_lname",txtLastName.text); 

          cmd.Parameters.AddWithValue("@ contract ",Convert.ToInt16(chkContract.Checked)); 

          int added=0;

          try

          {

               con.Open();

               added=cmd.ExecuteNonQuery();

               lblstatus.Text=added.ToString()+"条记录已插入";

           } 

          Catch(Exception err)

          {

                lblstatus.Text="错误:"+err.Message;

          }

    finally

           {

                con.Close();

           }

    }

    使用参数化的数据命令,参数值已经从sql命令中移除,并添加到了Parameters集合中。这样,在参数值中出现的引号或者sql语句片段将不会对sql命令的执行造成任何问题。这样也就可以防sql注入式攻击。

    增、删、改功能都可以用这种参数化数据命令写sql语句。

posted on 2012-05-29 15:13 SkyDream 阅读(384) 评论(0)  编辑  收藏 所属分类: ADO.NET

<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜