我正在使用 C# 与 SQL 数据库交互。数据库有一个 DateTime 字段。当我尝试从 C# 编写 DateTime 对象时,出现以下错误:
错误 [22008] [Microsoft][ODBC SQL Server 驱动程序]日期时间字段溢出
我在这个话题上找到了这个:
我可以在 C# 端对我的 DateTime 对象进行任何操作吗?
编辑 我正在尝试添加 DateTime.MinValue
我正在使用 C# 与 SQL 数据库交互。数据库有一个 DateTime 字段。当我尝试从 C# 编写 DateTime 对象时,出现以下错误:
错误 [22008] [Microsoft][ODBC SQL Server 驱动程序]日期时间字段溢出
我在这个话题上找到了这个:
我可以在 C# 端对我的 DateTime 对象进行任何操作吗?
编辑 我正在尝试添加 DateTime.MinValue
听起来你只是传递了一个糟糕的约会。例如,DateTime.MinValue 超出 SQL Server 日期时间值的可接受范围约 1600 年。
顺便说一句,您不应该将 ODBC 用于 C# 到 SQL Server 的通信。使用 System.Data.SqlClient 会给你更好的性能。
.NET DateTime 对象的范围比 SQL 日期/时间字段大。
在您的数据访问层中,每当您将日期写入数据库时,请确保该日期在 SqlDateTime.MinValue 和 SqlDateTime.MaxValue 的范围内。
我很确定,您的 .NET DateTime 未初始化,这意味着它是“0000-01-01”,这不是 SQL Server DATETIME 的有效值,而且通常不是所需的值 ;-)
将所有日期时间列更改为 datetime2 类型。使用下面的查询生成 sql 脚本。
select distinct concat('alter table ', table_name, ' alter column ', column_name, ' datetime2 ',
case when(is_nullable = 'NO') then ' NOT ' else '' end, ' NULL;')
from information_schema.columns where data_type = 'datetime';