我意識到這是一個相當常見的問題,圍繞論壇進行,但我對此處的錯誤感到茫然。使用GETDATE將數據類型varchar轉換爲datetime時出錯()
我有一個 '當前' 表是這樣的:
ID(uniqueidentifier)
Name(nvarchar max)
FileName(nvarchar max)
FileVersion(smallint)
CurrentVersionDate(datetime)
使用的SQLserver中的GETDATE()函數輸入的CurrentVersionDate。
當用戶點擊我網站上的「創建文件」時,此表的詳細信息將被轉移到「歷史記錄」表中。所以我使用存儲過程從'Current'中選擇*細節並將每個值保存爲變量(我在Visual Studio項目中使用vb.net)。我會顯示日期變量,因爲這是問題。我節省這是一個「日期」變量:
Dim dDate as Date
dDate = dr("CurrentVersionDate")
然後我這些變量發送到另一個存儲過程,進入「歷史記錄」表:
Execute sp_InsertHistory '" & ID & "','" & strName& "','" & strFile & "','" & intVersion & "','" & dDate & "'"
我宣佈的日期變量存儲過程爲:
@Date datetime,
與插入語句:
INSERT INTO History
(ID, Name, FileName, FileVersion, VersionDate)
VALUES
(@ID, @Name, @FileName, @FileVersion, @Date)
「歷史記錄」表與「當前」表具有相同的設置。通過代碼,這個錯誤被捕獲:
Error converting data type varchar to datetime
當然,變量不是varchar?即使是這樣,該字符串肯定是對於SQLserver格式正確,因爲我只是選擇SQL給出的日期值! 有什麼想法?
不要將這些變量轉換成字符串,將它們設置爲命令參數值。請參閱http://stackoverflow.com/questions/13014044/sending-parameters-to-stored-procedures-vb-net – flup 2013-05-13 09:01:56