将Now()插入日期时间字段时出错(SQL Server 2005 9.0.5057)
我正在将ASP表单中的新行插入到服务器上的数据库中 当我查看服务器中的条目时,看起来它们实际上是在添加,但它确实在执行行停止了所有功能:将Now()插入日期时间字段时出错(SQL Server 2005 9.0.5057),sql,sql-server-2005,datetime,asp-classic,vbscript,Sql,Sql Server 2005,Datetime,Asp Classic,Vbscript,我正在将ASP表单中的新行插入到服务器上的数据库中 当我查看服务器中的条目时,看起来它们实际上是在添加,但它确实在执行行停止了所有功能: With .Parameters(@blahblah) = Request.Form("blahblah") .Parameters("@lastUpdate") = Now() ... .Execute End With 以
With
.Parameters(@blahblah) = Request.Form("blahblah")
.Parameters("@lastUpdate") = Now()
...
.Execute
End With
以下是我得到的错误:
用于ODBC驱动程序的Microsoft OLE DB提供程序80040e07
[Microsoft][ODBC SQL Server驱动程序][SQL Server]将字符数据类型转换为日期时间数据类型导致日期时间值超出范围。/results.asp217
添加的条目在列中的日期为:
2011-11-28 15:52:13.000
我感觉只有在使用DateTime2SQL字段时才会出现我印象中的毫秒数
在研究之后,我尝试了一些运气不佳的事情:
- 添加“Session.LCID=2057”-某些SQL Server具有英国或美国设置,这将覆盖用户设置
- 尝试一系列不同的日期格式,例如FormatDateTime(Now(),0-5)
- 我可以使用“下一步错误恢复”,但我更愿意正确更正
非常感谢您的帮助。如果没有您的其他信息,我会这样做:
sqlcommand.Parameters.Add("@blahblah", SqlDbType.VarChar).Value = Request.Form("blahblah")
sqlcommand.Parameters.Add("@lastUpdate", SqlDbType.DateTime2).Value = Now()
最好的方法(如果可能的话)是让更新
lastUpdate
字段在数据库上触发 您已尝试传递命名参数,但如果NamedParameters
值为False(默认情况下),将忽略参数名称(参数的附加顺序将受到影响)。见财产
在执行之前,请将
your\u command\u对象。NamedParameters
设置为True
。能否向我们展示更多代码,尤其是构建sql命令和添加参数的方式。数据库数据类型是什么?您是否确认您的代码没有以“错误”的顺序写入日期(美国和英国日期)?你可以改为现在写datetime.ToString(“yyyy-MM-dd HH:MM:ss”)吗?@Miika L.-请参阅我关于“添加”Session.LCID=2057(区域设置ID)的评论-这是确保日期以正确格式传递的原因。ToString()也是vbscript中的CStr()。数据库数据类型是datetime(不是datetime2)。在数据库中触发,这实际上是一个我没有想到的好主意。我将看看我能做些什么,并告诉您这是否解决了问题。谢谢,但我认为asp.vbscript“datetime”和SQL Server 2005“datetime”之间的格式似乎有问题。将日期时间变量(不要转换为字符串,作为日期时间传递)传递给日期时间类型的参数不需要任何格式(都是date、datetime、smalldatetime、datetime2)。试试看。我也尝试了一些变体。不过这很有趣:-不确定如何指定Now()来使用此格式(yyyymmddHHMMSS.xxx)