使用DateTimePicker从访问数据库检索记录时数据类型不匹配

时间:2010-03-23 11:05:46

标签: c# ms-access datetimepicker

当我尝试使用C#中的DateTimePicker从两个日期之间的访问数据库中检索记录时,我收到数据类型不匹配条件表达式错误。

这是Select语句

else if (dtpDOBFrom.Value < dtpDOBTo.Value)
{
    cmdSearch.CommandText = "SELECT [First Name], [Surname], [Contact Type], [Birthdate] FROM [Contacts] WHERE [Birthdate] >= '" + dtpDOBFrom.Value +"' AND [Birthdate] <= '" + dtpDOBTo.Value +"'";
}

1 个答案:

答案 0 :(得分:1)

dtpDOBFrom.Value是一个DateTime,您尝试将其粘贴到字符串中。因此,DateTime被转换为字符串,但格式似乎与Access期望的格式不同。您可以使用DateTime.ToString的参数进行播放(并将日期括在#而不是',因为这是Access想要的),但不是是正确的方法。

正确的方法是避免这种类型转换问题(以及SQL注入等),使用parameters

在你的情况下,它看起来像这样(未经测试):

cmdSearch.CommandText = "SELECT [First Name], [Surname], [Contact Type], [Birthdate] FROM [Contacts] WHERE [Birthdate] >= ? AND [Birthdate] <= ?";
cmdSearch.Parameters.AddWithValue("DOBFrom", dtpDOBFrom.Value);
cmdSearch.Parameters.AddWithValue("DOBTo", dtpDOBTo.Value);

使用OLEDB(用于MS Access数据库访问),参数名称(“DOBFrom”)并不重要,但添加它们的顺序必须与SQL中问号的顺序相匹配。