Что вызывает мое 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 (традиционный) режим.
поскольку использование этих двух режимов приводит к двум несколько различным наборам зарезервированных слов, запрос, использующий зарезервированное слово, может работать в одном режиме и завершиться ошибкой в другом режиме
Кит
..и завернули все колонки имена в скобках в любом случае, чтобы исключить его.
не только имена столбцов, которые должны быть заключены в квадратные скобки Имена таблиц также должны Например, замените нижеприведенную строку
SELECT id FROM table1 WHERE id = 5
С нижней строкой
SELECT [id] FROM [table1] WHERE [id] = 5
еще одна возможная причина этого исключения - если файл, который вы пытаетесь загрузить / прочитать, не существует.
Я нашел полезным выполнить "файл".Существует", прежде чем пытаться открыть файл, просто чтобы убедиться, что мой код обнаруживает эту конкретную причину "IErrorInfo.Ошибка GetDescription с исключением E_FAIL " правильно.