我使用C#从MS Access读取数据。但是让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 UI中成功执行查询。
这里有什么问题?
答案 0 :(得分:1)
我不确定,但我不认为OleDb类支持命名参数。请尝试以下SQL:
SELECT * FROM Flats WHERE Flats.VersionStamp <= ? AND Flats.Flat=?
必须以正确的顺序将参数添加到命令对象中(我没有看到您在代码中添加参数)。
答案 1 :(得分:0)
您在SQL字符串中定义/使用参数的位置;我没有看到他们。
试试这个:
SELECT * From Flats WHERE VersionStamp = @theDate AND Flat = @theFlat
DbParameter = new OleDbParameter ("@theDate", someDate);
答案 2 :(得分:0)
http://support.microsoft.com/default.aspx?scid=kb;en-us;316744
与前面的内容相反 文档错误描述, OleDbCommand参数是位置的 当他们与微软一起使用时 SQL Server OLE DB提供程序。名字 参数可以是任意的...... 您的参数顺序 添加到OleDbParameterCollection 必须匹配参数的顺序 在您的存储过程中。