【问题标题】:Error converting data type varchar to datetime using GETDATE()使用 GETDATE() 将数据类型 varchar 转换为日期时间时出错
【发布时间】:2013-05-13 17:03:13
【问题描述】:

我意识到这是论坛中相当普遍的问题,但我不知道我在这里做错了什么。

我有一个类似的“当前”表:

ID(uniqueidentifier)
Name(nvarchar max)
FileName(nvarchar max)
FileVersion(smallint)
CurrentVersionDate(datetime)

CurrentVersionDate 是使用 SQLserver 中的 GETDATE() 函数输入的。

当用户在我的网站上点击“创建文件”时,该表的详细信息将传输到“历史”表中。因此,我使用存储过程从“当前”中选择 * 详细信息并将每个值保存为变量(我在 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 给出的日期值! 有什么想法吗?

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 是的,我现在觉得自己很蠢! dDate 被检索为日期时间,格式为 #5/13/2013 10:06:17 AM# - 显然 SQL 不喜欢“AM”位。感谢您的健全性检查,您的建议奏效了!
【解决方案2】:

该字符串肯定是 SQLserver 的正确格式

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

【讨论】:

  • 我最初认为是因为日期最初是使用 SQL getdate() 命令在 SQL 中输入的。但很明显,当我在 vb.net 中检索该日期时,它的检索格式略有不同 - 正如@SysDragon 指出的那样。真的应该意识到这一点,但是当我一直呆呆地盯着屏幕一会儿时,所有的常识都消失了……
猜你喜欢
  • 2013-01-15
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多