我对SQL Server 2008中的存储过程和DateTime2
数据类型提出了一个小问题。
我使用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'之前插入日期。
现在我已经知道SQL Server中的DateTime2
数据类型应该支持这一点。
所以我的问题是这可能是一个驱动程序问题,更新SQLClient会解决这个问题,或者这是一个普遍问题,我终于可以停止搜索并只使用1753.01.01。
感谢Lim
答案 0 :(得分:6)
如果没有为SQL参数指定任何内容并使用.AddWithValue()
方法,我相信ADO.NET将默认使用SqlDbType.DateTime
,其范围内有此限制(1之前没有日期) /1753分之1)。
您需要使用此调用显式定义参数的数据类型:
SqlParameter dateTime2Param = sqlStatement.Parameters.Add("@Date", SqlDbType.DateTime2);
dateTime2Param.Value = "0001.01.01 00:00:00";
然后它应该工作,我相信。 SqlDbType
枚举在.NET 3.5中添加了此DateTime2
类型