我遇到了使用ADO将完整日期时间值从VB6传递到sybase的问题。似乎忽略了毫秒。
下面是存储过程的示例代码:
CREATE PROCEDURE dbo.usp_ReturnDatetimeInput (
@Input datetime,
@Output datetime output
)
AS
--Show input value
print '@Input = ' + convert(varchar(20), @Input, 14)
set @Output = @Input
GO
vb6代码
Private Function TestDatetimeOutputValue(dInput as Date) As Date
Dim cmd As New ADODB.Command
With cmd
<snip>
.Parameters.Append .CreateParameter("@Input", adDBTimeStamp, , 8, dInput)
.Parameters.Append .CreateParameter("@Output", adDBTimeStamp, adParamOutput, 8, dInput)
.Execute
If Not IsEmpty(.Parameters("@Output").Value) Then
TestDatetimeOutputValue = .Parameters("@Output").Value
End If
End With
End Function
adDBTimeStamp
字段不是VB日期类型。通过轻松地将其值分配给Date变量,您已经转换了它,并将其截断以适应。
请参阅如何从ADO adDBTimeStamp字段中获取秒的分数档案
您可以选择如何携带这些值以在VB6中使用它们。一个选项可能是一个UDT,它有一个Date字段和一个Long或Integer来保存毫秒。另一种方法可能是计算存储在Decimal或Currency类型变量中的内容,例如,将Date值缩放为一整部分,并将ms作为小数部分添加。
VB6不在日期数据类型中存储毫秒。所以…传递给过程的值已经删除了毫秒。