OleDbException: несоответствие типов данных в выражении критериев - PullRequest
0 голосов
/ 16 марта 2009

Я читаю данные из MS Access, используя C #. Но получите OleDbException, пытаясь выполнить такой запрос:

SELECT * FROM Flats 
WHERE Flats.VersionStamp <= [theDate] AND Flats.Flat=[theFlat]

OleDbException:

Data type mismatch in criteria expression.

С другой стороны, любой из следующих запросов работает нормально:

SELECT * FROM Flats 
WHERE Flats.VersionStamp <= [theDate] AND Flats.Flat=1

SELECT * FROM Flats 
WHERE Flats.VersionStamp <= #1/1/2009# AND Flats.Flat=[theFlat]

Код C # остается неизменным:

DbParameter theFlat = new OleDbParameter("theFlat", 1);
DbParameter theDate = new OleDbParameter("theDate", new DateTime(2009, 1, 1));

using (DbDataReader reader = dbHelper.ExecuteReader(sqlText, theFlat, theDate))
{ }

Наконец, запрос может быть успешно выполнен непосредственно в пользовательском интерфейсе MS Access.

Что здесь не так?

Ответы [ 3 ]

1 голос
/ 16 марта 2009

Я не уверен, но я не думаю, что классы OleDb поддерживают именованные параметры. Попробуйте вместо этого следующий SQL:

SELECT * FROM Flats WHERE Flats.VersionStamp <= ? AND Flats.Flat=?

Параметры должны быть добавлены к объекту команды в правильном порядке (я не вижу, чтобы вы добавляли параметры в свой код).

0 голосов
/ 16 марта 2009

http://support.microsoft.com/default.aspx?scid=kb;en-us;316744

Вопреки тому, что предшествовало документация ошибка описывает, Параметры OleDbCommand являются позиционными когда они используются с Microsoft Поставщик OLE DB для SQL Server. Имена параметров может быть произвольным ... Порядок параметров, которые вы добавить в коллекцию OleDbParameterCollection должен соответствовать порядку параметров в вашей хранимой процедуре.

0 голосов
/ 16 марта 2009

Где вы определяете / используете параметры в вашей строке SQL; Я их не вижу.

Попробуйте это:

SELECT * From Flats WHERE VersionStamp = @theDate AND Flat = @theFlat

DbParameter = new OleDbParameter ("@theDate", someDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...