創建更穩健的數據命令(參數化數據命令)

             在參數化數據命令中,使用參數作為占位符來替代硬編碼的值。這些參數將被分別添加,并自動進行特殊字符的編碼處理。例如下面的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 閱讀(399) 評論(0)  編輯  收藏 所屬分類: ADO.NET

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

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 日喀则市| 长沙市| 囊谦县| 靖边县| 浠水县| 家居| 永嘉县| 高青县| 淮南市| 德兴市| 广德县| 大城县| 宝鸡市| 遂平县| 吉安市| 黑龙江省| 浮梁县| 潞城市| 长沙市| 静宁县| 唐河县| 迁西县| 鄢陵县| 榆林市| 大厂| 南通市| 都昌县| 濮阳市| 江孜县| 炉霍县| 昭苏县| 宕昌县| 五峰| 天水市| 河东区| 曲麻莱县| 晋江市| 凤阳县| 怀安县| 上思县| 罗田县|