我有一个方法,它接收了一些参数,其中有三个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.
有没有人知道可能发生的事情?
答案 0 :(得分:2)
来自here
date数据类型可以保存从1年1月1日到12月31日的日期, 9999. datetime数据类型只能保存从1753年1月1日到9999年12月31日的日期。因此,您的表中的日期必须包含值 不到1753年1月1日。
由于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
}
答案 1 :(得分:0)
是的,它的becoz SQL DateTime和DotNet DateTime在允许的范围内有所不同。