.NET DateTime到SqlDateTime转换

时间:2010-02-03 10:08:51

标签: c# .net datetime sqldatetime

在将.NET DateTime(默认为(DateTime)时)转换为SqlDateTime时,我应该始终检查.NET日期是否在SqlDateTime.MinValue和SqlDateTime.MaxValue之间[或者]是否有一种好方法可以执行此操作。

6 个答案:

答案 0 :(得分:93)

日期是否可能超出该范围?它来自用户输入吗?如果这两个问题的答案都是肯定的,那么你应该经常检查 - 否则你的应用程序容易出错。

您可以非常轻松地格式化日期以包含在SQL语句中:

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

答案 1 :(得分:2)

如果要检查DBNULL,将SQL Datetime转换为.NET DateTime应该不是问题。但是,您可能会遇到将.NET DateTime转换为有效的SQL DateTime的问题。

SQL Server无法识别171年1月1日之前的日期。那是英格兰采用格里高利历的一年。通常检查DateTime.MinValue就足够了,但如果您怀疑数据可能在18世纪之前有多年,则需要进行另一次检查或使用不同的数据类型。 (我经常想知道博物馆在他们的数据库中使用了什么)

检查最大日期不是必需的,SQL Server和.NET DateTime的最大日期都是12/31/9999它可能是有效的业务规则,但不会导致问题。

答案 2 :(得分:1)

另外请记住决议[时间的量子]是不同的。

http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx

SQL one为3.33 ms,.net one为100 ns。

答案 3 :(得分:1)

关于我的权利,我在这里偶然发现,只是回击发布我发现的...

使用EF4时,可以使用BitConverter从.NET的DateTime填充“sql的”日期时间列。

EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());

Fakrudeen的链接也让我更进一步......谢谢。

答案 4 :(得分:0)

- 只比较日期部分,你可以这样做:

var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");

答案 5 :(得分:0)

var sqlCommand = new SqlCommand("SELECT * FROM mytable WHERE start_time >= @StartTime");
sqlCommand.Parameters.Add("@StartTime", SqlDbType.DateTime);
sqlCommand.Parameters("@StartTime").Value = MyDateObj;