2015-04-29 42 views
1

我試圖阻止SQL注入。我做對了嗎? (我正在使用MS Access。)我仍然應該使用sqlparameter給定一個或多個所需參數沒有值

OleDbParameter[] myparm = new OleDbParameter[2]; 
myparm[0] = new OleDbParameter("@UserID", UserName.Text); 
myparm[1] = new OleDbParameter("@Password", encode); 

string queryStr = "SELECT * FROM TMUser WHERE [email protected] AND [email protected]"; 

OleDbConnection conn = new OleDbConnection(_connStr); 
OleDbCommand cmd = new OleDbCommand(queryStr, conn); 

conn.Open(); 
OleDbDataReader dr = cmd.ExecuteReader(); 

回答

1

關閉!

string queryStr = "SELECT * FROM TMUser WHERE [email protected] AND [email protected]"; 

OleDbConnection conn = new OleDbConnection(_connStr); 
OleDbCommand cmd = new OleDbCommand(queryStr, conn); 
cmd.Parameters.AddWithValue("@UserID", UserName.Text); 
cmd.Parameters.AddWithValue("@Password", encode); 

的參數是命令對象的一部分,您使用Parameters.AddWithValue方法的參數值設置爲你在查詢字符串中定義的內容。

順便說一句,你應該使用using語句來封裝你的一些對象,這裏是我通常做的:

using (OleDbConnection conn = new OleDbConnection(_connStr)) 
using (OleDbCommand = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = "SELECT ..."; 
    cmd.Parameters.AddWithValue(...); 

    cmd.ExecuteReader(); 
    //... 
} 

這樣,你就不必擔心清理,如果一些資源在完成時出現錯誤或關閉連接。

+0

謝謝!欣賞建議。 –

相關問題