所以,我試圖改變我的程序的設計,以防止SQL注入,看到老SQL字符串是如何通過預設的字符串串聯文本框製成。C# - ODBC參數演戲
我使用的ODBC驅動程序在DB2數據庫。
事情是,它工作在某些情況下,在別人少了點。
讓我給你舉個例子:
舊代碼:
App.Comando.CommandText = "SELECT NOMUSU, CodEmp FROM DB.Users WHERE CODUSU = '" + txt_usuario.Text + "' AND PASUSU = '" + txt_password.Password + "'";
新代碼:
App.Comando.CommandText =
"SELECT NOMUSU, CodEmp FROM DB.Users WHERE CODUSU = ? AND PASUSU = ?";
App.Comando.Parameters.AddWithValue("@codusu", txt_usuario.Text);
App.Comando.Parameters.AddWithValue("@pass", txt_password.Password);
這一個完美的作品。
然而,這一次,沒有。不會拋出任何錯誤,只是回來看似空洞。
舊代碼:
App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = '" + marca + "'";
新代碼:
App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = ?";
App.Comando.Parameters.AddWithValue("@marca", marca);
就在你需要它時,
string marca = txt_marca.Text.Trim().ToUpper();
在這種情況下,新的代碼不能正常工作,舊的那個。我一直在拉我的頭髮,這沒有意義。
謝謝你的時間!
'App.Comando.Parameters.AddWithValue(「@ desmar」,marca);'? – artm
@artm是的,marca事先被定義爲文本框的修剪後的toupper文本。應該提到 –
我想在'AddWithValue'中使用'@ desmar'而不是'@ marca' – artm