OLEDB + JET: Синтаксисная ошибка в работе присоединения
-
04-10-2019 - |
Вопрос
Я построил сложный запрос для моей базы данных доступа и в доступе, она работает как очарование. Но когда я стараюсь запустить один и тот же запрос в моей программе через OLEDB, я получаю исключение «Синтаксис ошибки присоединения». Нет дополнительной информации.
SELECT
MainTable.Main_dbID,
D0.Kvp_Value AS ["Value"]
FROM (MainTable
INNER JOIN (
SELECT Main_dbID, Kvp_Value
FROM KVPTable
WHERE Kvp_Code IN (1, 2, 4)
) AS D0
ON D0.Main_dbID = MainTable.Main_dbID)
WHERE Main_Time <= ? AND Main_Time >= ?;
Я сломал запрос насколько я чувствовал, что он все еще представлен. Причина, по которой я использую подселект вместо прямого соединения, заключается в том, что мне необходимо присоединиться к моим таблице значений ключей несколько раз, чтобы положить разные клавиши в разные столбцы. Я не мог получить это, чтобы работать в другой.
Я работаю с C # 2.0 и Visual Studio 2008 в случае необходимости.
Решение
Нашел проблему. То, как я вошел в запрос, сломал это ...
Редактировать: Как вы можете видеть, я распределил запрос на несколько строк, поэтому его немного проще читать. Когда я вставил его в исходный код, это произошло:
"SELECT FooField" +
"FROM BarTable;";
который приводит к «выбранному кауфаиллу BARTABLE;» - Так очевидно, не допустимый синтаксис, это больно. Я просто не осознавал это сначала ...
Другие советы
Это, безусловно, запутанное сообщение. Что не так, это дополнительная запятая:
D0.Value AS ["Value"], <-- here
Я надеюсь, что эти имена не являются настоящими именами полей (столбцов), потому что значение и время зарезервированы словами и будут вызывать бесконечные проблемы. Я предлагаю, чтобы хотя бы вы вложили их в квадратные скобки, если они являются настоящими именами.