所以,我试图改变我的程序的设计,以防止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