2011-11-28 65 views
0

我正在执行从ASP窗体插入到我的服务器上的数据库的新行。错误现在插入()到日期时间字段(SQL Server 2005 9.0.5057)

当我看到在服务器中的条目,它看起来好像他们实际上增加,但它确实在执行行停止所有功能:

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

这是我得到的错误:

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

[微软] [ODBC SQL Server驱动程序] [SQL服务器]一个char数据类型到datetime数据类型的转换导致超范围外datetime VALU e./results.asp217

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

2011-11-28 15:52:13.000

我有一个感觉这是我在印象之下只有在使用DateTime2 SQL字段时出现的毫秒数。

有几件事情我已经没有运气研究后尝试:

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

任何帮助表示赞赏。

+0

你能告诉我们更多的代码,特别是你建立一个sql命令并添加一个参数的方式。 –

+0

什么是数据库数据类型?你有没有确认你的代码不是按照“错误”顺序(美国和英国的日期)写日期?你可以写你的datetime为Now.ToString(“yyyy-MM-dd HH:mm:ss”)吗? –

+0

@Miika L. - 查看我对'Adding'Session.LCID = 2057'(区域设置ID)的评论 - 这是确保日期以正确格式传递的原因。 ToString()也是在vbscript中的CStr()。数据库数据类型是datetime(不是datetime2)。 –

回答

1

没有你的信息,我会做这种方式:

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

最好的办法(如果可能的话)将离开更新lastUpdate场触发数据库。

+0

触发数据库,​​这实际上是一个好主意,我没有想到。我会看看我能做什么,并让你知道这是否解决了问题。 –

1

您试过传递命名参数,但如果NamedParameters值为False(默认情况下)参数名称将被忽略(参数的追加顺序将会影响)。见NamedParameters财产。

执行前将your_command_object.NamedParameters设置为True

+0

谢谢,但我认为它看起来像asp.vbscript'datetime'和SQL Server 2005'datetime'之间的格式问题。 –

+0

您不需要任何格式来传递日期时间变量(不要转换为字符串,作为日期时间传递)到日期时间类型参数(所有日期,日期时间,smalldatetime,日期时间2)。你试一试。 –

+0

我试过了,也有一些公平的变化。这很有趣,虽然: http://technet.microsoft.com/en-gb/library/ee198928.aspx - 不知道我将如何指定Now()使用此格式,虽然(yyyymmddHHMMSS.xxx) –

相关问题