Что вызывает мое OLEDbException, IErrorInfo.Ошибка GetDescription с ошибкой E (0x80004005)

Я использую OleDbConnection, OldDbCommand и OleDbReader против базы данных Access.

у меня есть именованный запрос в базе данных, который я вызываю из кода.

запрос работает правильно, когда он запускается из access.

несколько ресурсов указывают, что ошибка может быть вызвана использованием зарезервированных слов в запросе и заключением их в скобки. Я не использую какие-либо зарезервированные слова и завернул все имена столбцов в скобки, чтобы управлять им из.

пытаясь определить, где проблема, я упростил запрос, чтобы простой

SELECT id FROM table1 WHERE id = 5 

которое соединение Ole не создает исключение.

когда я представляю следующую часть запроса:

SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5" 

тогда я получаю исключение.

детали исключения следующие:

  • Сообщение: IErrorInfo.Ошибка GetDescription с E_FAIL (0x80004005).
  • код ошибки: -2147467259
  • NativeError: -533136361
  • SQLState: 3000

3 ответов


Я, по-видимому, ошибся, когда сказал, что запрос не содержит никаких зарезервированных слов.

запрос, который я использовал, выбирался из другого запроса в базе данных Access. У этого другого запроса было зарезервированное ключевое слово, которое вызывало проблему.

BTW:

компонент Access database engine работает в разных режимах в зависимости от того, вызывается ли он из Access, объектов доступа к данным, поставщика Microsoft OLE для компонента Access database engine или Драйвер ODBC Microsoft Access. Он может быть запущен в режиме ANSI или не-ANSI (традиционный) режим.

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

доступ 2007 зарезервированные слова и символы

Кит


..и завернули все колонки имена в скобках в любом случае, чтобы исключить его.

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

SELECT id FROM table1 WHERE id = 5

С нижней строкой

SELECT [id] FROM [table1] WHERE [id] = 5

еще одна возможная причина этого исключения - если файл, который вы пытаетесь загрузить / прочитать, не существует.

Я нашел полезным выполнить "файл".Существует", прежде чем пытаться открыть файл, просто чтобы убедиться, что мой код обнаруживает эту конкретную причину "IErrorInfo.Ошибка GetDescription с исключением E_FAIL " правильно.