網頁

2012年9月26日 星期三

以具名參數實做資料庫新增修改刪除


在C#中常會使用文字方塊來輸入資料到資料庫,但是這樣將會有SQL Injection(SQL隱碼)的危險。

當然,可以使用字元替換(TextBox1..Text.Replace)的方法,避免無聊人士胡亂輸入字元,
而筆者則是建議使用具名參數來達成相同的效果,如此一來可以避免掉許多的風險。

使用具名參數的流程可以分為五個部分:

1. 新增使用資料庫以及具名參數所需之Namespace(命名空間)
2. 宣告需使用的物件-SqlConnection及SqlCommand並給予初值
3. 開啟資料庫連線,並建立具名參數所使用的參數名稱,資料型別,並指定輸入的TextBox
4. 執行SQL指令
5. 關閉資料連線

以下為範例程式碼:
//1. 新增使用資料庫以及具名參數所需之Namespace(命名空間)
using System.Data.SqlClient;//引用資料庫所需的資料
using System.Data;//引用具名參數所需的資料
.
.
.
.
//-----------------------------------------------------------------

//2. 宣告連線並指定使用的資料庫名稱及登入帳號密碼
SqlConnection connect = new SqlConnection("server = localhost; uid = xxxx; pwd = yyyy; database = test;");

        //3.1 開啟資料連線
        connect.Open();

//----------------------------------------新增

//此SQL指令為新增table2的資料,資料表內id欄位所輸入的字串從TextBox而來
SqlCommand cmdInsert = new SqlCommand("INSERT INTO table2(id,name,content,date) VALUES (@id,@name,@content,@date)", connect);

//3.2 建立具名參數的參數名稱,並指定參數所要帶入的資料來自TextBox
cmdInsert.Parameters.Add("@id",SqlDbType.NVarChar).Value = TextBox1.Text;
cmdInsert.Parameters.Add("@name",SqlDbType.NVarChar).Value = TextBox2.Text;
cmdInsert.Parameters.Add("@content",SqlDbType.NVarChar).Value = TextBox3.Text;
cmdInsert.Parameters.Add("@date",SqlDbType.NVarChar).Value = TextBox4.Text;


        //4. 開啟資料庫執行SQL語法
        cmdInsert.ExecuteNonQuery();

//----------------------------------------修改

//此SQL指令為更新table2的資料,資料表內id欄位所輸入的字串從TextBox而來
SqlCommand cmdUpdate = new SqlCommand("UPDATE table2 SET name = @name, content = @content, date = @date WHERE id = @id",connect);

//3.2 建立具名參數的參數名稱,並指定參數所要帶入的資料來自TextBox
cmdUpdate.Parameters.Add("@id",SqlDbType.NVarChar).Value = TextBox1.Text;
cmdUpdate.Parameters.Add("@name",SqlDbType.NVarChar).Value = TextBox2.Text;
cmdUpdate.Parameters.Add("@content",SqlDbType.NVarChar).Value = TextBox3.Text;
cmdUpdate.Parameters.Add("@date",SqlDbType.NVarChar).Value = TextBox4.Text;


        //4. 開啟資料庫執行SQL語法
        cmdUpdate.ExecuteNonQuery();

//---------------------------------------刪除

//此SQL指令為刪除table2的某筆資料,TextBox1.Text輸入的字串為刪除依據
SqlCommand cmdDelete = new SqlCommand("DELETE FROM table2 WHERE id = @id",connect);

//3.2 建立具名參數的參數名稱,並指定參數所要帶入的資料來自TextBox
        cmdDelete.Parameters.Add("@id",SqlDbType.NVarChar).Value = TextBox1.Text;

        //4. 開啟資料庫執行SQL語法
        cmdDelete.ExecuteNonQuery();

        //5. 關閉資料連線
        connect.Close();


沒有留言:

張貼留言