0

我有一个方法,它接受一些参数,其中有三个DateTime字段(从 Web 窗体填充)

方法使用一个自动生成的TableAdapter并将DataSet新记录添加到表中。在Table.Add[newRow]语句之后,我们调用Dataset.Update(Table)语句以将添加持久化到数据库中。

虽然这几乎适用于所有情况,但有时会出现错误: System.Data.SqlClient.SqlException (0x80131904): The conversion of a date data type to a datetime data type resulted in an out-of-range value The statement has been terminated..

有没有人知道可能发生的事情?

4

2 回答 2

2

这里

date 数据类型可以保存从第 1 年的 1 月 1 日到 9999 年 12 月 31 日的日期。datetime 数据类型只能保存从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期。因此,表中的日期必须小于 Jan 1, 1753.

由于DateTime是一个结构,因此总是有一个值(DateTime.MinValue),另一个可能的原因是DateTime无法成功解析。

因此,您可以在插入之前检查 是否DateTime在有效范围内SqlDateTime

DateTime darkAge = new DateTime(1111, 1, 1);
if (darkAge >= SqlDateTime.MinValue.Value && darkAge <= SqlDateTime.MaxValue.Value)
{
    // we're not gettting here since the dark age was before 1753 
}
于 2013-01-11T11:24:33.493 回答
0

是的,因为 SQL DateTime 和 DotNet DateTime 在允许的范围内有所不同。

SqlDateTime.MinValue != DateTime.MinValue,为什么?

于 2013-01-11T11:17:53.597 回答