.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"}'");