2013-05-13 120 views
0

我意識到這是一個相當常見的問題,圍繞論壇進行,但我對此處的錯誤感到茫然。使用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給出的日期值! 有什麼想法?

+0

不要將這些變量轉換成字符串,將它們設置爲命令參數值。請參閱http://stackoverflow.com/questions/13014044/sending-parameters-to-stored-procedures-vb-net – flup 2013-05-13 09:01:56

回答

0

由於您在引號之間插入日期,因此是varchar '" & dDate & "'",但我認爲轉換後的問題可能是您以本地格式檢索日期,並且必須在SQL中插入日期服務器以他自己的格式。

請嘗試將日期爲以下格式的字符串:dDate.ToString("MM/dd/yyyy HH:mm:ss")

+0

對,我現在覺得很愚蠢! dDate以格式#5/13/2013 10:06:17 AM#格式作爲日期時間檢索 - 顯然SQL不喜歡'AM'位。 感謝您的理智檢查,您的建議奏效! – rxs179 2013-05-13 09:08:04

0

字符串無疑是正確的格式使用Sql Server

你怎麼知道的?爲了安全起見,我會以明確的格式使用字符串:YYYY-MM-DDTHH:MM:SS,例如2013-05-13T01:01:00

+0

我最初認爲,因爲日期最初是在SQL中使用SQL getdate()命令輸入的。但顯然,當我在vb.net中檢索該日期時,它會以稍微不同的格式檢索 - 就像@SysDragon指出的那樣。應該已經意識到這一點,但是當我一直在屏幕上茫然地盯着屏幕一段時間,所有的常識都消失了...... – rxs179 2013-05-13 09:11:47

相關問題