Моя компания находится в процессе перевода базы данных из SQL 2000 в SQL 2008. Я в процессе тестирования некоторых из наших устаревших приложений и наткнулся на приложение VB6, которое сталкивается с ошибкой.Код пытается запустить простое обновление для записи и проверить, что метод Execute затронул более одной строки с помощью параметра RecordsAffered.
Код VB6
cmd.ActiveConnection = gcnADODE
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Wendy_OffshoreQC_UpdateQCRecord"
Set QCID = cmd.CreateParameter("@QCId", adInteger, adParamInput)
QCID.value = 1
cmd.Parameters.Append QCID
Set QCBatchFailurePercentage = cmd.CreateParameter("@QCBatchFailurePercentage", adDecimal, adParamInput)
QCBatchFailurePercentage.Precision = 18
QCBatchFailurePercentage.NumericScale = 2
QCBatchFailurePercentage.value = 1.11
cmd.Parameters.Append QCBatchFailurePercentage
Set QCBatchCompleteDate = cmd.CreateParameter("@QCBatchCompleteDate", adDate, adParamInput)
QCBatchCompleteDate.value = Format(Now, "yyyy-mm-dd hh:mm:ss")
cmd.Parameters.Append QCBatchCompleteDate
cmd.Execute numRecordsUpdate
success = numRecordsUpdate > 0
Хранимая процедурасоздать код
ALTER proc [dbo].[Wendy_OffshoreQC_UpdateQCRecord]
@QCId int
,@QCBatchFailurePercentage decimal (18,2)
,@QCBatchCompleteDate smalldatetime
AS
UPDATEtblQC
SET
QCBatchFailurePercentage=@QCBatchFailurePercentage
,QCBatchCompleteDate=@QCBatchCompleteDate
WHERE
QCID=@QCId
Я не уверен, какое соединение ADO заканчивается.Внешний поставщик - это поставщик OLE DB для SQL Server, но в расширенных свойствах диск называется SQL Server.Я собираюсь попытаться исправить часть кода, чтобы он соответствовал используемому драйверу.
Provider=SQLOLEDB.1;Password=1234;Extended
Properties="driver={SQL Server};uid=username;database=db;
server=server";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;
Workstation ID=PICASWS186;Use Encryption for Data=False;Tag with column collation when
possible=False
Однако numRecordsUpdate
всегда возвращает -1 вместо 1, как это было в SQL 2000. Я знаюЯ могу изменить хранимую процедуру, чтобы она возвращала @@rowcount
, или просто удалить проверку на успешность, но есть другие части кода с этим шаблоном, у которых есть похожая проблема.