.NET DateTime到SqlDateTime转换
当转换.NET DateTime(当是默认(DateTime))到SqlDateTime时,我应该总是检查.NETdate是否在SqlDateTime.MinValue和SqlDateTime.MaxValue之间[或]是否有一个好办法做到这一点。
date可能实际上超出了这个范围吗? 它来自用户input吗? 如果对这两个问题中的任何一个的答案都是肯定的,那么你应该经常检查 – 否则你会让你的应用程序容易出错。
您可以格式化date,以便将其包含在SQL语句中:
var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
如果您正在检查DBNULL,将SQL Datetime转换为.NET DateTime应该不成问题。 但是,您可能会遇到将.NET DateTime转换为有效的SQL DateTime的问题。
SQL Server不会识别1753年1月1日之前的date。 这是英格兰在那一年采用了格里历。 通常检查DateTime.MinValue是足够的,但如果您怀疑数据可能在18世纪之前有几年,则需要进行另一次检查或使用不同的数据types。 (我经常想知道博物馆在他们的数据库中使用什么)
检查最大date并不是必须的,SQL Server和.NET DateTime都有一个最大date为12/31/9999这可能是一个有效的业务规则,但它不会造成问题。
另外请记住分辨率[时间的量子]是不同的。
http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx
SQL之一是3.33毫秒和.net一个是100纳秒。
在我的追求做这与entitie,我偶然发现在这里,只是打回来发布我发现了…
当使用EF4时,可以使用BitConverter从.NET的date时间填充“sql的”date时间列。
EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());
也Fakrudeen的链接进一步给我…谢谢你。
– 只比较date部分,你可以这样做:
var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");