因此,我正在尝试更改程序的设计以防止SQL注入,通过将TextBox与预设字符串连接来查看SQL字符串的生成情况。
我在DB2数据库上使用ODBC驱动程序。
事情是,它在某些情况下起作用,在其他情况下它不起作用。
让我举个例子:
旧代码:
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();
在这种情况下,新代码不起作用,旧代码不起作用。我一直把头发拉出来,这没什么意义。
谢谢你的时间!
答案 0 :(得分:0)
你设置了命令的类型吗?
App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = ?";
App.Comando.Parameters.AddWithValue("?marca", marca);