C# - ODBC参数起作用

时间:2016-11-25 09:43:36

标签: c# sql db2 odbc

因此,我正在尝试更改程序的设计以防止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();

在这种情况下,新代码不起作用,旧代码不起作用。我一直把头发拉出来,这没什么意义。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

你设置了命令的类型吗?

App.Comando.CommandText = "SELECT CODMAR FROM DB.Marcas AS MARCAS WHERE DESMAR = ?";
App.Comando.Parameters.AddWithValue("?marca", marca);