我有一個傳統的vb6應用程序,它可以訪問在SQL2000和SQL2008數據庫上運行的數據庫。從日期時間從vb6調用Sql Server 2008存儲過程
使用adDBTimeStamp輸入參數從vb6調用帶有日期時間參數的存儲過程時,會將完整的日期時間(包括秒)傳遞給存儲過程。
當在sql2008 r2數據庫中調用相同的存儲過程時,秒總是爲零。
編輯:
兩者SQL2000數據庫和SQL2008 R2數據庫上創建下面的存儲過程。
CREATE PROCEDURE [DBO]。[TestDate](@DateAndTime DATETIME)
AS
SET NOCOUNT ON
BEGIN
SELECT @DateAndTime AS DateAndTime
END
然後建立一個VB6應用程序與下面的命令按鈕事件方法:
Private Sub Command_Click()
Dim SQL2000_ConnectionString As String
Dim SQL2008_ConnectionString As String
Dim DateOnly As Date
Dim DateAndTime As Date
DateAndTime = DateTime.Now
SQL2000_ConnectionString = "Driver={SQL Server};Server=<SQL2000ServerName>;UID=<UserName>;pwd=<Password>;Database=<DataBaseName>;dsn=''"
SQL2008_ConnectionString = "Provider=SQLNCLI10;DataTypeCompatibility=80;Server=<SQL2008ServerName>;Database=<DataBaseName>;User Id=<UserName>;Password=<Password>;"
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim Msg As String
Set conn = New ADODB.Connection
conn.ConnectionTimeout = 300
Call conn.Open(SQL2000_ConnectionString)
Set cmd = New ADODB.Command
With cmd
.CommandType = adCmdStoredProc
Set .ActiveConnection = conn
.CommandType = adCmdStoredProc
.CommandText = "TestDate"
.CommandTimeout = 60
Call .Parameters.Append(.CreateParameter("@dtDateAndTime", adDBTimeStamp, adParamInput))
.Parameters("@dtDateAndTime").Value = DateAndTime
Set rs = .Execute
End With
If Not rs.EOF Then
Msg = "DateTime:" & rs.fields("DateAndTime").Value
Call MsgBox(Msg)
End If
Call conn.Close
Set conn = New ADODB.Connection
conn.ConnectionTimeout = 300
Call conn.Open(SQL2008_ConnectionString)
Set cmd = New ADODB.Command
With cmd
.CommandType = adCmdStoredProc
Set .ActiveConnection = conn
.CommandType = adCmdStoredProc
.CommandText = "TestDate"
.CommandTimeout = 60
Call .Parameters.Append(.CreateParameter("@dtDateAndTime", adDBTimeStamp, adParamInput))
.Parameters("@dtDateAndTime").Value = DateAndTime
Set rs = .Execute
End With
If Not rs.EOF Then
Msg = "DateTime:" & rs.fields("DateAndTime").Value
Call MsgBox(Msg)
End If
Call conn.Close
結束子
當執行VB6應用程序,所述第一消息框顯示的日期和時間,包括秒。第二個消息框的秒數顯示爲零。
我在數據庫中記錄輸入參數時看到了同樣的情況。
看起來好像對SQL2008 R2數據庫的調用截斷了輸入參數的秒數。
2日編輯:
看來,OLE DB驅動程序可能是罪魁禍首。 當我更改爲使用Native Client時,它似乎正常工作。 SQL2008_ConnectionString =「Driver = {SQL Server Native Client 10.0}; Server =; UID =; pwd =; Database =;」
由於這是一個使用頻率很高的傳統應用程序,迴歸測試所有使用新驅動程序是時間過於緊張。有沒有辦法讓OLE DB驅動程序做正確的事情?
3日編輯:
剛剛意識到這不是一個SQL 2008 R2箱。我誤解了。它只是SQL2008
這是我的@@版本: Microsoft SQL Server 2008(SP3) - 10.0.5500.0(X64)Sep 21 2011 22:45:45 Copyright(c)1988-2008 Microsoft Corporation Enterprise Edition( 64位)在Windows NT 6.1(內部版本7601:Service Pack 1)(VM)
假設這是一個問題...你可以發佈一些代碼。 VB6 sie和來自兩個數據庫的sprocs – Rob 2014-12-05 10:44:43
您可以運行SQL分析器查看針對2008 DB執行的命令嗎?我懷疑這些命令是相同的,並且您在2008年的日期列可能是SmallDateTime數據類型。 (只是猜測)。 – 2014-12-05 15:33:54