3

我在使用 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
4

2 回答 2

2

字段不是adDBTimeStampVB 日期类型。通过愉快地将其值分配给 Date 变量,您已经对其进行了转换,将其截断以适合。

请参阅如何从 ADO adDBTimeStamp 字段中获取小数部分档案

您可以选择如何携带这些值以在 VB6 中使用它们。一个选项可能是带有 Date 字段和 Long 或 Integer 来保存毫秒的 UDT。另一个可能是计算您存储在 Decimal 或 Currency 类型变量中的内容,您可以将 Date 值扩展到整个部分并添加 ms。例如作为小数部分。

于 2013-06-25T15:54:30.770 回答
1

VB6 在日期数据类型中不存储毫秒。所以......您传递给过程的值已经删除了毫秒。

于 2013-06-25T00:37:15.530 回答