OleDbException:条件表达式中的数据类型不匹配

时间:2009-03-16 12:44:40

标签: .net sql ms-access

我使用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中成功执行查询。

这里有什么问题?

3 个答案:

答案 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   必须匹配参数的顺序   在您的存储过程中。