Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出_C#_.net_Sql Server_Sql Server 2008 - Fatal编程技术网

C# System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出

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

我正在使用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: (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