2016-11-25 5 views
0

Итак, я пытаюсь изменить дизайн моей программы, чтобы предотвратить 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(); 

В этом случае новый код не работает, старый сделал. Я вытаскиваю волосы, это просто не имеет смысла.

Спасибо за ваше время!

+0

'App.Comando.Parameters.AddWithValue (" @ desmar ", marca);'? – artm

+0

@artm yes, marca определяется заранее как обрезанный, топорный текст текстового поля. Должен был упомянуть, что –

+0

Я хотел использовать '@ desmar' вместо' @ marca' внутри 'AddWithValue' – artm

ответ

0

У вашего набора есть тип команды?

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

Первый ничего не меняет, второй дает мне исключение ODBC, поскольку ODBC не принимает именованные параметры в текстовых командах, только в хранимых процедурах. Однако, спасибо. –

+0

Я изменил свой ответ. – Esperento57

+0

Это не хранимая процедура. Хранимая процедура хранится в базе данных и может быть вызвана из кода. –

Смежные вопросы