2011-08-19 66 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