在 Web 應用程式的開發過程中,Web 安全是非常重要的,現存的很多網站也都存在一
些非常嚴重的安全漏洞,其中SQL 注入是非常常見的漏洞,如果将查詢語句進行參數化查
詢,可以減少SQL 注入漏洞的機率,參數化查詢示例代碼如下所示。
string strsql = "select * from mynews where id= @id"
上述代碼使用了參數化查詢,在存儲過程中,參數化是非常常見的,存儲過程通過
Command 對象進行參數的添加和指派。同樣,參數化查詢也可以通過Command 對象進行
添加和指派,參數化查詢過程如下所示。
建立一個 Command 對象。
Command 對象增加一個參數。
通過索引對 Command 參數進行指派。
第一篇視窗與界面程式設計 267
執行 ExecuteReader 方法傳回個DataReader 對象。
通過 Command 對象可以為存儲過程,以及參數化查詢語句進行參數的添加,示例代碼
如下所示。
protected void Page_Load(object sender, EventArgs e)
{
string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";
SqlConnection con = new SqlConnection(str);
con.Open();
string strsql = "select * from mynews where id = @bh";
SqlCommand cmd = new SqlCommand(strsql, con); //建立Command 對
象
cmd.Parameters.Add("@bh", SqlDbType.Int); //增加參數@bh
cmd.Parameters[0].Value = 4; //通過索引為參數賦
值
SqlDataReader dr = cmd.ExecuteReader(); // 執行後傳回
DataReader 對象
while (dr.Read()) //周遊DataReader
對象
{
Response.Write(dr["title"].ToString()+"<hr>");
}
}
參數化查詢能夠有效的解決一些安全問題,提高Web 應用的安全性。同時,參數化查
詢能夠極大的簡化程式設計。隻需要通過數值的更改而不需要修改SQL 語句,極大的友善
了應用程式的維護。
注意:如果未初始化Parameter 資料類型的屬性,但設定了Value 屬性,那麼Parameter
會自動選擇合适的資料類型