2013-05-14 2 views
0

Мой запрос на двух различных таблиц пользовательской таблицы и табличные зона создает проблему:Регистрация запроса VB.net DataReader

cmd.CommandText = "SELECT zone_name, zone_difference FROM user_master INNER JOIN zones on user_master.zone_id = zones.ID WHERE user_master.uname LIKE " & """" & usr_gl & """" 

Dim reader_q As OleDbDataReader 

reader_q = cmd.ExecuteReader() 

Здесь имя зоны и разностные из таблицы зон и zone_id (от клиента) и ID (зоны). Также имя пользователя (uname) поступает извне как переменная usr_gl, например «admin»

Это не значение, заданное для одного или двух параметров. Я проверил все столбцы и данные таблицы. Тот же запрос выполняется независимо от базы данных Access.

Есть ли что-то не так, что я выполняю здесь?

+0

Возможно, значение времени выполнения 'usr_gl' вводит элемент синтаксиса параметра в запрос и путает парсер запросов? Использование конкатенации строк для построения запросов к базе данных довольно опасно, даже если вы считаете, что имеете контроль над входными значениями. Сохраняется ли проблема при устранении уязвимости SQL-инъекции и использовании параметризованных запросов? – David

ответ

0

Да, вы пытаетесь конкатенациями строк, и это NO-NO в коде

cmd.CommandText = "SELECT zone_name, zone_difference FROM " & _ 
        "user_master INNER JOIN zones on user_master.zone_id = zones.ID " & _ 
        "WHERE user_master.uname LIKE ?" 

cmd.Parameters.AddWithValue("@p1", usr_gl) 
Dim reader_q As OleDbDataReader 
reader_q = cmd.ExecuteReader() 

Объединение строк считаются плохой практикой, потому что многие проблемы могут возникнуть с этим правильной строкой форматирования (в кавычках, десятичные числа, даты) является первой проблемой, но хуже всего Sql Injection. Использование параметризованных запросов должно избегать всех этих проблем.

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