Я прочитал данные из MS Access с помощью C#. Но получить OleDbException пытается выполнить такой запрос: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]
С # код остается неизменным все время:
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.
Что здесь не так?
В зависимости от базового db, с которым он ведет переговоры, Ole разрешает именованные параметры, но просто не использует имена: вам все равно придется выстраивать их по порядку. –
AFAIK, OleDb поддерживает именованные параметры, но не полностью. Вы можете дать имена параметрам, но вам действительно нужно добавить их в правильном порядке в command-object. –
Спасибо, Джоэл и Фредерик. Я изменил порядок параметров в ExecuteReader (...), и он работает! – alex2k8