C# 比较asp.net sql where子句中的datetime列和datetime变量

C# 比较asp.net sql where子句中的datetime列和datetime变量,c#,asp.net,sql-server,datetime,C#,Asp.net,Sql Server,Datetime,我在数据库中有一个名为compare\u timedatatype:DateTime的列。其值插入为2017年8月3日12:09:08 AM。现在在c语言中,我想写一个查询来比较这个列的值是否等于新加坡的当前日期时间。只需要比较日期。。当前新加坡日期时间为2017年3月8日下午3:35:11 请帮助更正where子句。第一步不是使用自动字符串转换来比较日期,而是使用参数。 这仍然不够,因为DateTime变量还包含时间部分和数据库列。因此,您需要在数据库数据和变量中隔离日期部分 DateTime

我在数据库中有一个名为compare\u timedatatype:DateTime的列。其值插入为2017年8月3日12:09:08 AM。现在在c语言中,我想写一个查询来比较这个列的值是否等于新加坡的当前日期时间。只需要比较日期。。当前新加坡日期时间为2017年3月8日下午3:35:11


请帮助更正where子句。

第一步不是使用自动字符串转换来比较日期,而是使用参数。 这仍然不够,因为DateTime变量还包含时间部分和数据库列。因此,您需要在数据库数据和变量中隔离日期部分

DateTime dt = Convert.ToDateTime(singaporetime); //08-03-2017 PM 03:35:11.
SqlDataAdapter adapter = new SqlDataAdapter(@"SELECT * FROM time_details 
                    where Convert('Date',compare_time) = @date", con1);
adapter.SelectCommand.Parameters.Add("@date", SqlDbType.DateTime).Value = dt.Date;
....
这样,您就不会让编译器决定哪个字符串“格式”对Sql Server理解您的查询是正确的。 相反,您可以使用Today属性将DateTime变量作为日期传递给数据库引擎,该属性没有任何有意义的时间部分,而数据库引擎现在拥有进行正确比较的所有信息

请注意,这种方法可能不是最有效的方法。WHERE子句中的转换可能会破坏索引。也许你可以用另一种方法

string cmdText = @"SELECT * FROM time_details 
                   where compare_time >= @init AND 
                         compare_time < @end";

SqlDataAdapter adapter = new SqlDataAdapter(cmdText, con1);
adapter.SelectCommand.Parameters.Add("@init", SqlDbType.DateTime).Value = dt.Date;
adapter.SelectCommand.Parameters.Add("@end", SqlDbType.DateTime).Value = dt.Date.AddDays(1);

显示:正在使用的SQL Server版本不支持数据类型“date”。请将其更改为SqlDbType.DateTime。重要的一点是DateTime变量dt的值。如果我们使用Today属性,那么时间部分仅为00:00:00,它应该能够与使用>=的查询以及使用dt.Today时的查询配合使用。Today显示:错误成员'System.DateTime.Today.get'不能通过实例引用访问;改为使用类型名称限定它。我已将其更改为dt.ToShortDateString;对吗?又是我的错。是dt.Date,不应该使用字符串ToSortDateString生成一个字符串来传递datetime值,这是我的错误。在dt.Date末尾使用。现在更正。工作
string cmdText = @"SELECT * FROM time_details 
                   where compare_time >= @init AND 
                         compare_time < @end";

SqlDataAdapter adapter = new SqlDataAdapter(cmdText, con1);
adapter.SelectCommand.Parameters.Add("@init", SqlDbType.DateTime).Value = dt.Date;
adapter.SelectCommand.Parameters.Add("@end", SqlDbType.DateTime).Value = dt.Date.AddDays(1);