在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();
當然,可以使用字元替換(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();
沒有留言:
張貼留言