带有DateTime2的SQL Server 2008存储过程

Lim*_*Lim 2 vb.net datetime2 sql-server-2008

我对DateTime2SQL 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()
Run Code Online (Sandbox Code Playgroud)

从我的程序调用存储过程(存储过程是一个简单的INSERT声明没有别的,并与实际日期工作正常).但是当我输入日期时0001.01.01 00:00:00,总是会出现错误,当我想执行存储过程时,我无法在'01 .01.1753'之前插入日期.

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

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

谢谢Lim

mar*_*c_s 6

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

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

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

那么它应该有效,我相信.在SqlDbType列举了这种DateTime2类型的加入.NET 3.5