1

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

这是选择语句

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 +"'";
}
4

1 回答 1

1

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

通常避免此类类型转换问题(以及 SQL 注入等)的正确方法是使用参数

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

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 中问号的顺序相匹配。

于 2010-03-23T11:15:55.317 回答