2016-11-08 14 views
0

에서 오류를 무시하는 것은ADO 가능성이 SQL 서버 여기

(0 행 ...

UPDATE table1 SET date = GETDATE() WHERE id = @id 

IF @@ROWCOUNT = 0 
BEGIN; 
    THROW 50004, 'Row not updated.', 1; 
END 

은 내가 얻을, 가짜 ID로 Management Studio에서이 작업을 실행하면 ... 일부 SQL입니다 영향을받는) 메시지 50004, 수준 16, 상태 1, 절차 MyStoredProcedure, 줄 50 행 업데이트되지 않았습니다.

이 파일을 ASP Classic에서 실행하면 Err.Number은 0이고 연결 오류 컬렉션은 비어 있습니다.

UPDATE 문을 제거하면 오류가 등록됩니다.

왜 ADO는 업데이트 후에 오류를 무시합니까?

+1

* "ADO ignoring error"*가 다소 예상되지만, ADODB가 사용하는 SQL Server 공급자가 어떤 이유로 THROW 문을 트리거하지 않을 가능성이 큽니다. SSMS에서 작동하기 때문에 ADODB에서 처음 작동한다는 것을 의미하는 것은 아니지만 SSMS에서 쿼리를 테스트하는 것이 처음이므로 기억하십시오. 결정적인 증거가 될 때까지 결론에 도달하지 않으려 고 노력하십시오. – Lankymart

+0

'@@ ROWCOUNT'에 대한 올바른 결과를 얻으려면'SET NOCOUNT ON;'을 호출합니까? – Lankymart

+0

예, 질문은 뻔합니다. 좋은 생각. 나는 SET NOCOUNT ON;으로 문제를 해결했다. 그러나 그것도 없어도'@@ ROWCOUNT'는 ASP에서 호출 할 때 여전히 작동합니다. 그리고 저장 프로 시저의 OUT 매개 변수를 통해 ASP에 올바른 값을 반환하여이를 증명했습니다. 그래서 내 "가설"은 여전히 ​​반박되지 않는다고 생각합니다. –

답변

1

SET NOCOUNT ON을 저장 프로 시저의 시작 부분에 추가했습니다.

Here, 그것은

SET NOCOUNT ON 저장 프로 시저의 각 문하여 클라이언트에 DONE_IN_PROC 메시지의 전송을 방지 ... 말한다.

따라서 DONE_IN_PROC 메시지는 다음 오류를 건너 뛰었을 가능성이 있습니다.