회사에서 SQL 2000에서 SQL Server 2008로 데이터베이스를 이동하는 중입니다. 일부 기존 응용 프로그램을 테스트하는 중이고 VB6 응용 프로그램 버그가 발생했습니다. 이 코드는 레코드에 대한 간단한 업데이트를 실행하고 Execute 메서드가 RecordsAffected 매개 변수를 사용하여 둘 이상의 행에 영향을 미치는지 확인합니다.SQL Server 2008로 이동할 때 영향을받는 ADO 명령 개체 레코드
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
[email protected]
,[email protected]
WHERE
[email protected]
ADO 연결을 사용하여 끝나는 잘 모르겠습니다을 만들 수 있습니다. 외부 공급자는 SQL Server OLE DB 공급자이지만 확장 된 속성에서 드라이브는 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
은 항상 대신은 SQL 2000 내가 @@rowcount
을 반환하거나 성공을위한 체크를 제거하기 위해 저장 프로 시저를 변경할 수 있습니다 알고에했던 것처럼 (1) -1을 반환하지만 코드의 다른 부분이있다 유사한 문제가있는이 패턴이 있습니다.
SQL Server 기본 클라이언트를 사용하고 있습니다. – Gariig
그래서 SET NOCOUNT ON을 포함하도록 저장 프로 시저를 변경해 보았습니다. 업데이트를 실행하기 전에? 그것은 직관적이지는 않지만 "1 행 (들) 영향을 받았습니다"라는 메시지가 방해가 될 수 있다고 생각합니다. –