2011-08-19 70 views
2

存储过程我有关于存储过程的小问题和DateTime2数据类型在SQL Server 2008中的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。

感谢林

回答

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类型

+0

谢谢!这工作:) – Lim

+0

@Lim:是的,'.AddWithValue()'很方便 - 但有时有点危险,因为它从一开始并不总是显而易见的'SqlDbType'将被挑选为您提供的值。我更愿意总是**明确地告诉参数什么'SqlDbType'这是 - 一个(讨厌)惊喜的可能性较小... –

+0

我明白你的意思是这是我第一次遇到问题与.AddWithValue ()函数。我将在未来的计划中记住这一点:)非常感谢你清除那:) – Lim