Итак, я пытаюсь изменить дизайн моей программы, чтобы предотвратить SQL-инъекцию, видя, как были созданы старые строки SQL, объединяя TextBoxes с заданной строкой.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 yes, marca определяется заранее как обрезанный, топорный текст текстового поля. Должен был упомянуть, что –
Я хотел использовать '@ desmar' вместо' @ marca' внутри 'AddWithValue' – artm