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

时间:2013-05-13 08:54:57

标签: sql vb.net visual-studio-2010 sql-server-2008-r2

我意识到这是围绕论坛的一个常见问题,但我不知道我在这里做错了什么。

我有一个'当前'表格如下:

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语句:

INSERT INTO History
(ID, Name, FileName, FileVersion, VersionDate)
VALUES
(@ID, @Name, @FileName, @FileVersion, @Date)

“历史记录”表格与“当前”表格具有相同的设置。单步执行代码,会捕获此错误:

Error converting data type varchar to datetime

当然变量不是varchar?即使它是,字符串肯定是正确的SQLserver格式,因为我只是选择SQL给出的日期值! 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

  

字符串肯定是SQLserver

的正确格式

你怎么知道的?为了安全起见,我会以明确的格式使用字符串:YYYY-MM-DDTHH:MM:SS,例如2013-05-13T01:01:00

答案 1 :(得分:0)

由于您将日期置于引号之间,因此是varchar '" & dDate & "'",但我认为转换时遇到的问题可能是您要检索本地格式的日期,并且必须插入日期在SQL Server中以他自己的格式。

尝试以此格式插入日期作为字符串:dDate.ToString("MM/dd/yyyy HH:mm:ss")