2010-01-11 2 views
0

회사에서 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을 반환하지만 코드의 다른 부분이있다 유사한 문제가있는이 패턴이 있습니다.

답변

0

저장 프로 시저에서 SET NOCOUNT ON을 사용하는 것보다 더 나은 대답이 있는지 모르겠으며 OUTPUT 매개 변수를 사용하여 @@ ROWCOUNT를 반환하는 것이 좋습니다.

다른 공급자를 사용해 볼 수도 있습니다. 현재 ADO.net, OLEDB 또는 SQL Native Client를 사용하고 있습니까? 공급자를 변경하면 ADO.net에서 문제를 일으키는 데 사용되는 SET NOCOUNT ON을 알면 도움이 될 수 있습니다.

+0

SQL Server 기본 클라이언트를 사용하고 있습니다. – Gariig

+0

그래서 SET NOCOUNT ON을 포함하도록 저장 프로 시저를 변경해 보았습니다. 업데이트를 실행하기 전에? 그것은 직관적이지는 않지만 "1 행 (들) 영향을 받았습니다"라는 메시지가 방해가 될 수 있다고 생각합니다. –

관련 문제