OleDbCommand не может выполнить эту команду. Почему?

Я создаю таблицу с именем «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 только «выбрать *»? Спасибо.


person Jollian    schedule 15.12.2009    source источник


Ответы (5)


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

SELECT [Input], [Output] FROM PathTable WHERE IP = '127.0.0.1'
person Darin Dimitrov    schedule 15.12.2009
comment
Разве это не будет относиться к ним как к строковым литералам, Дарин? - person Chris Arnold; 15.12.2009
comment
Спасибо, Дарин. Ввод и вывод действительно являются зарезервированными словами MS-Access. Но я никогда не знал. - person Jollian; 15.12.2009
comment
Не правда ли, что альтернативой квадратным скобкам (которые являются злом и нарушают стандартную реализацию производных таблиц Access SQL 89) является полная спецификация полей, то есть SELECT PathTable.Input, PathTable.Output? - person David-W-Fenton; 16.12.2009
comment
@David W. Fenton: Реализация производных таблиц в режиме запросов ANSI-89 в Access сама по себе является злом. Обратите внимание, что SQL-89 относится к стандарту SQL, а язык Access — ANSI-89. Также обратите внимание, что в стандартном SQL для экранирования ключевых слов используются двойные кавычки (код ascii 0034), а не квадратные скобки, поэтому ссылки на стандарты SQL здесь неуместны. - person onedaywhen; 16.12.2009

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

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

person Pankaj    schedule 15.12.2009

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

person Tony Toews    schedule 15.12.2009
comment
Не только Access SQL, но и ODBC и ISO/ANSI Standard SQL, начиная с SQL-92. - person onedaywhen; 15.12.2009

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

[Ввод, вывод]

person Chris Arnold    schedule 15.12.2009

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

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

person Chris Pietschmann    schedule 30.09.2013