2011-11-28 78 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) –

相關問題