在将.NET DateTime(默认为DateTime的情况下)转换为SqlDateTime时,我是否应该始终检查.NET日期是否介于SqlDateTime.MinValue和SqlDateTime.MaxValue之间?还是有更好的方法来实现这一点。
在将.NET DateTime(默认为DateTime的情况下)转换为SqlDateTime时,我是否应该始终检查.NET日期是否介于SqlDateTime.MinValue和SqlDateTime.MaxValue之间?还是有更好的方法来实现这一点。
日期是否可能超出该范围?这个日期来自用户输入吗?如果这两个问题的答案都是肯定的,则应始终进行检查-否则,您的应用程序容易出现错误。
您可以很容易地为将日期包含在SQL语句中进行格式化:
var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
yyyy-MM-dd
格式并不完全独立于文化。更多细节请参见此处:https://sqlblog.org/2009/10/16/bad-habits-to-kick-mis-handling-date-range-queries - LukeHEntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());
同时,Fakrudeen的链接让我更深入地了解了这个问题...谢谢。
另外请记住,分辨率[时间量子]是不同的。
http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx
SQL 的执行时间是 3.33 毫秒,而 .net 的执行时间是 100 纳秒。
-要仅比较日期部分,您可以这样做:
var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");
var sqlCommand = new SqlCommand("SELECT * FROM mytable WHERE start_time >= @StartTime");
sqlCommand.Parameters.Add("@StartTime", SqlDbType.DateTime);
sqlCommand.Parameters("@StartTime").Value = MyDateObj;