OleDbCommand не может выполнить эту команду, почему? - PullRequest
2 голосов
/ 15 декабря 2009

Я создаю таблицу с именем «PathTable» в БД MS-Access. Таблица выглядит так:

------------------------------
| IP        | Input | Output |
------------------------------
| 127.0.0.1 | XXXXX | YYYYYY |
------------------------------

Когда я запрограммировал эти

String CommandString = "SELECT Input, Output FROM PathTable WHERE IP = '127.0.0.1'";

OleDbCommand CommandObj = new OleDbCommand( CommandString, m_Connection );

OleDbDataReader ReaderObj = CommandObj.ExecuteReader();

код всегда выдает OleDbException, а ErrorDescription - E_FAIL (0x80004005),

Но если я заменил commandString на

SELECT * FROM PathTable WHERE IP = '127.0.0.1'

Проблема больше никогда не возникала.

Итак, мой вопрос: OleDbCommand только оправдывает "select *"? Спасибо.

Ответы [ 5 ]

2 голосов
/ 15 декабря 2009

Может быть, это зарезервировано слова. Попробуйте процитировать их:

SELECT [Input], [Output] FROM PathTable WHERE IP = '127.0.0.1'
1 голос
/ 15 декабря 2009

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

http://support.microsoft.com/kb/321266

0 голосов
/ 30 сентября 2013

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

Мне показалось полезным выполнить «File.Exists» перед попыткой открыть файл, просто чтобы убедиться, что мой код обнаруживает эту конкретную причину сбоя «IErrorInfo.GetDescription с исключением E_FAIL (0x80004005)».

0 голосов
/ 15 декабря 2009

Вход и выход могут быть ключевыми словами. Попробуйте окружить их квадратными скобками. т.е.

[Input] [Выход]

0 голосов
/ 15 декабря 2009

Возможно, «вход» или «выход» являются зарезервированными словами в Access SQL, поэтому попробуйте добавить [] квадратные скобки вокруг этих имен полей.

...