我应该如何在C#查询中使用c#datetime值?
到目前为止,我一直在做以下事情:
Datetime my_time = new DateTime(2012, 09, 05);
cmd.Parameters.AddWithValue("@date", my_time);
cmd.CommandText = "SELECT * FROM sales WHERE date = @date";
直到今天早上一直工作正常,当我从结果集中检索值时出现空错误。
我更改了我的日期参数,以便从我的日期时间值中获取短日期字符串,如下所示:
cmd.Parameters.AddWithValue("@date", my_time.ToShortDateString());
它似乎再次正常工作。
这样做的正确方法是什么? 显然我正在将我的日期时间值转换为字符串,只是(大概)数据库将其转换回在评估我的相等where子句之前的日期时间,这似乎有点无意义。
编辑:
我正在使用SQL Server Compact Edition,我的示例中的日期字段的精度设置为8(日期,不包括时间吗?)。这是否意味着我在00:00:00之前通过了完整日期?如何在不包含时间的情况下将日期时间值传递给数据库,而不首先转换为字符串?
答案 0 :(得分:2)
您可以尝试使用my_time.Date
cmd.Parameters.AddWithValue("@date", my_time.Date);
答案 1 :(得分:0)
不要将其作为字符串传递,否则会出现文化格式的问题。
请尝试使用SqlDateTime
。
答案 2 :(得分:0)
您没有将日期转换为字符串 - AddWithValue知道它是一个日期,但它是datetime
,所以它有一个时间组件。您的销售是否有时间组件?
SELECT * FROM sales WHERE DateDiff(d, @date, date) = 0