【问题标题】:Errors Inserting Now() into a datetime field (SQL Server 2005 9.0.5057)将 Now() 插入日期时间字段时出错 (SQL Server 2005 9.0.5057)
【发布时间】:2024-01-15 05:59:01
【问题描述】:

我正在将 ASP 表单中的新行插入到我服务器上的数据库中。

当我查看服务器中的条目时,看起来它们实际上是在添加,但它确实在执行行停止了所有功能:

With        
   .Parameters(@blahblah) = Request.Form("blahblah")  
   .Parameters("@lastUpdate") = Now()        
   ...         
   .Execute        
End With

这些是我得到的错误:

用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序 80040e07

[Microsoft][ODBC SQL Server Driver][SQL Server]char 数据类型到 datetime 数据类型的转换导致 datetime 值超出范围。/results.asp217

添加的条目在列中的日期为:

2011-11-28 15:52:13.000

我感觉这是我印象中的毫秒数,只有在使用 DateTime2 SQL 字段时才会出现。

在没有运气的情况下,我尝试了一些事情:

  • 添加 'Session.LCID = 2057' - 一些 SQL 服务器具有英国或美国设置,这会覆盖用户设置
  • 尝试多种不同的日期格式,例如 FormatDateTime(Now(), 0 - 5)
  • 我可以使用“On Error Resume Next”,但我更愿意正确纠正。

感谢任何帮助。

【问题讨论】:

  • 能否给我们展示更多代码,尤其是构建sql命令和添加参数的方式。
  • 什么是数据库数据类型?您是否确认您的代码没有以“错误”的顺序(美国日期与英国日期)编写日期?你能把你的日期时间写成 Now.ToString("yyyy-MM-dd HH:mm:ss") 吗?
  • @Miika L. - 查看我关于“添加 'Session.LCID = 2057'(区域设置 ID)的评论” - 这是确保日期以正确格式传递的原因。 ToString() 在 vbscript 中也是 CStr()。数据库数据类型是 datetime(不是 datetime2)。

标签: sql sql-server-2005 datetime asp-classic vbscript


【解决方案1】:

如果没有您的额外信息,我会这样做:

sqlcommand.Parameters.Add("@blahblah", SqlDbType.VarChar).Value = Request.Form("blahblah")
sqlcommand.Parameters.Add("@lastUpdate", SqlDbType.DateTime2).Value = Now()

最好的方法(如果可能的话)是更新lastUpdate 字段以在数据库上触发。

【讨论】:

  • 在数据库中触发,这其实是一个我没有想到的好主意。我会看看我能做些什么,如果这能解决问题,请告诉你。
【解决方案2】:

您已尝试传递命名参数,但如果 NamedParameters 值为 False(默认情况下),参数名称将被忽略(参数的附加顺序会受到影响)。请参阅NamedParameters 属性。

在执行前将your_command_object.NamedParameters设置为True

【讨论】:

  • 谢谢,但我认为 asp.vbscript 'datetime' 和 SQL Server 2005 'datetime' 之间的格式似乎存在问题。
  • 您不需要任何格式来将日期时间变量(不要转换为字符串,作为日期时间传递)传递给日期时间类型的参数(所有这些,日期,日期时间,小日期时间,日期时间2)。试试吧。
  • 我试过了,也有一些变化。不过这很有趣:technet.microsoft.com/en-gb/library/ee198928.aspx - 不确定我如何指定 Now() 来使用这种格式(yyyymmddHHMMSS.xxx)
最近更新 更多