使用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给出的日期值! 有什么想法?
由于您在引号之间插入日期,因此是varchar '" & dDate & "'"
,但我认为转换后的问题可能是您以本地格式检索日期,并且必须在SQL中插入日期服务器以他自己的格式。
请尝试将日期为以下格式的字符串:dDate.ToString("MM/dd/yyyy HH:mm:ss")
对,我现在觉得很愚蠢! 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
。
我最初认为,因为日期最初是在SQL中使用SQL getdate()命令输入的。但显然,当我在vb.net中检索该日期时,它会以稍微不同的格式检索 - 就像@SysDragon指出的那样。应该已经意识到这一点,但是当我一直在屏幕上茫然地盯着屏幕一段时间,所有的常识都消失了...... – rxs179 2013-05-13 09:11:47
不要将这些变量转换成字符串,将它们设置为命令参数值。请参阅http://stackoverflow.com/questions/13014044/sending-parameters-to-stored-procedures-vb-net – flup 2013-05-13 09:01:56