ADO中SQL Server 2008 datetime的等效数据类型是什么?

问题描述:

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

thisadDBTimeStamp

+0

即使adDBTimeStamp也不接受毫秒级的事情。我也看到这个问题 – Naveen 2011-05-26 09:06:14

当您在日期和时间组件之间的字符串值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

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

我还没有尝试过,但我认为你应该在存储过程中将参数的数据类型更改为varchar(23)并使用看起来像这样的字符串参数'2011-05-17T10:18:54.293'