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

Sql server 2008 ADO中SQL Server 2008的datetime的等效数据类型是什么?,sql-server-2008,ado,Sql Server 2008,Ado,SQL Server 2008中的datetime数据类型支持毫秒 我正在尝试执行一个存储过程,该过程接受一个datetime参数(带有毫秒的arg)作为输入/输出值 我无法将传入方法的字符串转换为datetime值。当我不传入毫秒值时,转换将正确进行 我在下面的方法中看到了转换问题 Set objpara2 = objCom.CreateParameter("datetime", adDate, adParamInputOutput, , "2011-01-01 11:01:01.123")

SQL Server 2008中的datetime数据类型支持毫秒

我正在尝试执行一个存储过程,该过程接受一个datetime参数(带有毫秒的arg)作为输入/输出值

我无法将传入方法的字符串转换为datetime值。当我不传入毫秒值时,转换将正确进行

我在下面的方法中看到了转换问题

Set objpara2 = objCom.CreateParameter("datetime", adDate, adParamInputOutput, , "2011-01-01 11:01:01.123")
在ADO中,SQL Server 2008的datetime的等效数据类型是什么?

以下是完整的代码片段:

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        
    ...
创建过程[dbo].[TestProc]@time1-time、@datetime-datetime输出
作为
开始
不计数;
从所有时间类型中选择@datetime=datetime,其中time=@time1;
结束
专用子命令1_Click()
Dim objCon作为ADODB.connection
Dim objCom作为ADODB.command
作为ADODB.参数的Dim objPara
作为ADODB.参数的Dim objpara2
将对象设置为ADODB.Recordset
将k变为整数
设置objCon=New ADODB.connection
Set objCom=New ADODB.command
objConConnectionString=“Provider=SQLNCLI10;”_
&“数据源=ES-89W87BS;”_
&“数据库=主机;”_
&“集成安全=SSPI;”_
&“DataTypeCompatibility=80;”_
&“用户ID=sa;”_
&“密码=;”
objCon.ConnectionString=objConConnectionString
开着
MsgBox“连接已打开”
用objCom
.CommandText=“TestProc”存储过程的名称
.CommandType=adCmdStoredProc'类型:存储过程
.ActiveConnection=objCon.ConnectionString
以
设置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
设置objRS=objCom.Execute
打开
不执行objRS.EOF时执行
对于k=0到objRS.Fields.Count-1
Debug.Print objRS(k).Name&“:”&objRS(k).Value
下一个
objRS.MoveNext
环
...

根据,
adDBTimeStamp
在日期和时间组件之间的字符串值中包含
T
时会发生什么情况?
(如
2011-01-01T11:01:01.123


显然ADO正在删除毫秒


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

,这不仅仅是一个片段。你应该试着把你的问题缩减到证明你的问题所需的最低限度,这样我们就不必阅读所有这些东西。这也会减少你无意中在互联网上发布你的
sa
密码的可能性。为什么你要使用“DataTypeCompatibility=80;”?即使是adDBTimeStamp也不接受毫秒数。我也看到了这个问题
Set objpara2 = objCom.CreateParameter("datetime", adDate, adParamInputOutput,,
 "2011-01-01T11:01:01.123")