2

DateTime2我对SQL Server 2008 中的存储过程和数据类型有一个小问题。

我有几个使用该DateTime2数据类型的存储过程,我想插入日期0001.01.01 00:00:00,但这不适用于 VB.net,我找不到原因。

我使用这个代码片段:

Dim sqlStatement As New SqlClient.SqlCommand
Dim sqlTransaction As SqlClient.SqlTransaction
sqlStatement.CommandType = CommandType.StoredProcedure
sqlStatement.CommandText = "SCHEMA.spInsertDate"
sqlStatement.Parameters.AddWithValue("@Date", "0001.01.01 00:00:00")
sqlStatement.ExecuteNonQuery()

从我的程序中调用存储过程(存储过程是一个简单的INSERT语句,仅适用于实际日期)。但是当我输入日期时0001.01.01 00:00:00,它总是会出现错误,当我想执行存储过程时,我无法在“01.01.1753”之前插入日期。

现在我已经知道DateTime2SQL Server 中的数据类型应该支持这一点。

所以我的问题是这可能是一个驱动程序问题,更新 SQLClient 可以解决这个问题,或者这是一个普遍的问题,我终于可以停止搜索,只使用 1753.01.01。

谢谢林

4

1 回答 1

6

如果您没有为您的 SQL 参数指定任何内容并使用该.AddWithValue()方法,我相信 ADO.NET 将默认使用SqlDbType.DateTime在其范围内具有此限制的内容(1753 年 1 月 1 日之前没有日期)。

您需要使用此调用显式定义参数的数据类型:

SqlParameter dateTime2Param = sqlStatement.Parameters.Add("@Date", SqlDbType.DateTime2);
dateTime2Param.Value = "0001.01.01 00:00:00";

然后它应该工作,我相信。SqlDbType枚举DateTime2在 .NET 3.5 中添加了这种类型

于 2011-08-19T08:44:14.087 回答