OLEDB + JET: Синтаксисная ошибка в работе присоединения

StackOverflow https://stackoverflow.com/questions/3749388

Вопрос

Я построил сложный запрос для моей базы данных доступа и в доступе, она работает как очарование. Но когда я стараюсь запустить один и тот же запрос в моей программе через 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

Я надеюсь, что эти имена не являются настоящими именами полей (столбцов), потому что значение и время зарезервированы словами и будут вызывать бесконечные проблемы. Я предлагаю, чтобы хотя бы вы вложили их в квадратные скобки, если они являются настоящими именами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top