Jet Access Query не работает подстановочный знак не выбран - PullRequest
0 голосов
/ 04 ноября 2018

Я использую SQL-запрос к набору данных и пытаюсь заполнить поле ReportViewer, но мне не повезло. Это продолжает заполнять все в области. все эти вещи являются новыми для меня, и поэтому я даже не думаю, что подхожу к этому правильно.

Я пытаюсь выбрать данные из подстановочного знака, который представлен строковой переменной в vb.net. Если я буду запускать его в построителе запросов с Class_Schedule. (Бла) в столбце, где это будет работать. однако, если я использую конструктор запросов и запускаю его независимо от того, что я ввел в параметр, он заполняет все поле.

SELECT        MemberBase.ID, MemberBase.EntireName, Class_Schedule.MemberID
FROM            (MemberBase INNER JOIN
                         Class_Schedule ON MemberBase.ID = Class_Schedule.MemberID)
WHERE        (true = ?)

любая помощь приветствуется и извините за плохое объяснение, я гуглил и пробовал разные вещи в течение 2 часов, и я не получил нигде.

EDIT:

В идеале вот что я хочу, но это не работает:

SELECT        MemberBase.ID, MemberBase.EntireName, Class_Schedule.MemberID
FROM            (MemberBase INNER JOIN
                     Class_Schedule ON MemberBase.ID = 
Class_Schedule.MemberID)
WHERE        (Class_Schedule.? = true)

1 Ответ

0 голосов
/ 04 ноября 2018

Заполнитель параметра запроса ? может принимать только сравниваемые значения. Если не может содержать имена столбцов. Если вы хотите сравнить разные столбцы, вы должны использовать конкатенацию строк для построения запроса.

sql = "SELECT ... WHERE [" & column_name & "] = true"

или с новой интерполяцией строки (где column_name - строковая переменная VB):

sql = $"SELECT ... WHERE [{column_name}] = true"

Если вы сравниваете значения, отличные от true, вам все равно следует использовать параметры для них из соображений безопасности. См .: SQL-инъекция .

Вы не можете передавать имена столбцов в качестве параметров, но вы можете использовать трюк:

SELECT ... WHERE (col1 = true OR 0 = ?) AND (col2 = true OR 0 = ?) AND (col3 = true OR 0 = ?)

и затем вы передаете параметр 1 для столбца, который вы хотите проверить, и 0 для остальных.

...