2011-05-25 137 views
4

SQL Server 2008中的datetime數據類型支持毫秒。ADO中SQL Server 2008 datetime的等效數據類型是什麼?

我正在嘗試執行一個存儲過程,該存儲過程接受以毫秒爲參數的datetime參數作爲輸入/輸出值。

我無法將傳入的字符串轉換爲方法作爲日期時間值。當我不傳入毫秒值時,轉換正確發生。

我在下面的方法中看到轉換問題。

Set objpara2 = objCom.CreateParameter("datetime", adDate, adParamInputOutput, , "2011-01-01 11:01:01.123") 

哪些是ADO的SQL Server 2008的日期時間的數據類型等同?

下面是完整的代碼片段:

CREATE PROCEDURE [dbo].[TestProc] @time1 time, @datetime datetime output 
as 
begin 
    SET NOCOUNT ON; 
    select @datetime = datetime from ALLTimeTypes where time = @time1; 
end 

Private Sub Command1_Click() 
    Dim objCon As ADODB.connection 
    Dim objCom As ADODB.command 
    Dim objPara As ADODB.Parameter 
    Dim objpara2 As ADODB.Parameter 
    Dim objRS As ADODB.Recordset 
    Dim k As Integer 

    Set objCon = New ADODB.connection 
    Set objCom = New ADODB.command 

    objConConnectionString = "Provider=SQLNCLI10;" _ 
     & "Data Source=ES-89W87BS;" _ 
     & "Database=MASTER;" _ 
     & "Integrated Security=SSPI;" _ 
     & "DataTypeCompatibility=80;" _ 
     & "User ID=sa;" _ 
     & "Password=<redacted>;" 

    objCon.ConnectionString = objConConnectionString 
    objCon.Open   
    MsgBox "Connection opened" 

    With objCom 
     .CommandText = "TestProc"  'Name of the stored procedure 
     .CommandType = adCmdStoredProc 'Type : stored procedure 
     .ActiveConnection = objCon.ConnectionString 
    End With 

    Set objPara = objCom.CreateParameter("time1", adVarChar, adParamInput, 50, "02:02:02.3456123") 
    Set objpara2 = objCom.CreateParameter("datetime", adDate, adParamInputOutput, , "2011-01-01 11:01:01") 

    objCom.Parameters.Append objPara 
    objCom.Parameters.Append objpara2 

    Set objRS = objCom.Execute   
    objRS.Open 
    Do While Not objRS.EOF 
     For k = 0 To objRS.Fields.Count - 1 
      Debug.Print objRS(k).Name & ": " & objRS(k).Value 
     Next 
     objRS.MoveNext 
    Loop   
    ... 
+1

這不僅僅是一個片段。你應該儘量減少你的問題,以證明你的問題所需的最低限度,所以我們不必閱讀所有的東西。這也會使你不太可能無意中在互聯網上發佈你的'sa'密碼。 – 2011-05-25 16:13:15

+0

爲什麼哦爲什麼你使用「DataTypeCompatibility = 80;」 ???????? – 2011-06-01 18:20:20

回答

2

thisadDBTimeStamp

+0

即使adDBTimeStamp也不接受毫秒級的事情。我也看到這個問題 – Naveen 2011-05-26 09:06:14

1

當您在日期和時間組件之間的字符串值T會發生什麼?
(如2011-01-01T11:01:01.123

Set objpara2 = objCom.CreateParameter("datetime", adDate, adParamInputOutput,, 
"2011-01-01T11:01:01.123") 
+0

即使這沒有奏效。 – Naveen 2011-05-26 09:06:32

2

顯然ADO被除去毫秒。 http://support.microsoft.com/kb/246438

我還沒有嘗試過,但我認爲你應該在存儲過程中將參數的數據類型更改爲varchar(23)並使用看起來像這樣的字符串參數'2011-05-17T10:18:54.293'

相關問題