使用GETDATE将数据类型varchar转换为datetime时出错()

问题描述:

我意识到这是一个相当常见的问题,围绕论坛进行,但我对此处的错误感到茫然。使用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

由于您在引号之间插入日期,因此是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

字符串无疑是正确的格式使用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