C# System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出
我正在使用C#net和sqlserver2008 尝试在项目中运行测试单元时,出现以下错误C# System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出,c#,.net,sql-server,sql-server-2008,C#,.net,Sql Server,Sql Server 2008,我正在使用C#net和sqlserver2008 尝试在项目中运行测试单元时,出现以下错误 System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.. 数据库表 Column Name: createddate Type: datetime Default Value: (ge
System.Data.SqlTypes.SqlTypeException:
SqlDateTime overflow. Must be between
1/1/1753 12:00:00 AM and 12/31/9999
11:59:59 PM..
数据库表
Column Name: createddate
Type: datetime
Default Value: (getdate())
Allow Nulls: No.
我不想将createddate作为插入查询的一部分插入
当我在数据库表中手动输入一些数据时,出现以下错误:
The row was successfully committed
to the database. However, a problem
occurred when attempting to retrieve
the data back after commit. Because
of this the displayed data within the
row is read-only. To fix this
problem, please re-run the query.
我不明白为什么我会出现这个错误,也找不到有这个问题的人。有人能帮忙吗?您可能在单元测试中遇到溢出错误,因为您传入了一个未初始化的日期时间,其值为DateTime.MinValue,超出了SQL的日期时间允许范围
我想我在手动修改表格时看到了错误消息,这不是问题,只需刷新表格即可。马特很可能在正确的轨道上。您已经为列定义了一个默认值,但是,只有在数据库的表中实际插入某些内容时,该值才会生效 当您进行单元测试时,正如您所说,您很可能会将DateTime变量初始化为某个值(或者不初始化-然后它将是DateTime.MinValue,即01/01/0001),然后将其发送到SQL Server,并且该值超出SQL Server上DateTime的有效范围(错误明确指出) 因此,您需要做的是在.NET单元测试中添加一行,将DateTime变量初始化为“DateTime.Today”: 然后将其插入SQL Server 或者:您可以更改您的SQL INSERT语句,使其不会为该列插入值—现在看起来是这样的,它确实会这样做(并尝试将该值—对于SQL Server—无效日期—插入到表中)。如果在INSERT中未指定该列,则默认的
getdate()
列将生效并将今天的日期插入该列
Marc您是否使用Linq to SQL编写单元测试
如果是,它可能会绕过getdate()默认值,而使用其他超出有效范围的值。是否使用DBML文件和所有这些文件的数据上下文类设置?如果是这样,那么您可以单击DBML文件中的字段并将“自动生成值属性”设置为True。Visual Studio必须已经知道如何处理Pkey字段,但必须为这些“时间戳”类型的操作进行设置我遇到了同样的问题,我使用Linq处理VS2010自动生成的数据类文件。 我意识到Linq没有使用默认值(
GetDate()
),但它将发送一个Datetime.Min
值。因此,SQL server将拒绝此日期时间“01/01/0001”,因为它不在范围内
我所做的修复是始终将该值设置为
Datetime.Now
或Datetime.Today
,这样Linq将不再发送错误的Min Datetime值。您可以在management studio的查询分析器中运行getdate()吗?看看它会返回什么。也许这是一个区域设置问题…如何解决?
DateTime myDateTime = DateTime.Today