2017-01-05 7 views
2

SQL 프로 시저를 실행하려고 할 때 SqlException이 발생하고 Number가 0이 될 수 있습니까?SqlException이 throw되고 property Number == 0 일 가능성이 있습니까?

특정 상황 : 도메인 컨트롤러를 사용할 수 없거나 응답하지 않고 SQL Server와의 실제 통신이 발생하지 않았습니다. SqlException.Number 다음과 같은 경우를 제외하고, 0이라고

+0

https : //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror.number (v = vs.110) .aspx – TheGameiswar

+0

및 https : // msdn을 확인하십시오. microsoft.com/en-us/library/system.data.sqlclient.sqlexception.number(v=vs.110).aspx – TheGameiswar

+0

이전에 SqlConnection을 열었을 때 연결이 끊어 졌음을 의미합니까? 이 경우 클라이언트 구성 요소는 "전송 레벨 오류가 발생했습니다 ..."메시지를 던지므로 해당 예외에는 숫자 (19 - 실제 연결을 사용할 수 없음)가 있습니다. 숫자 * = 0 인 오류 상태가 정의되어 있습니다. – dlatikay

답변

0

아니, 그것은 불가능합니다

  • 읽기 전용 결과를 구문 분석하는 동안
  • 서버 있었다 심각한 오류 처리 쿼리
  • 가공 취소 실패를 라우팅
  • 는 USI 당신이하지 않은 가정 사용자 인스턴스

을 만들 수 없습니다 SQL Server 2016의 읽기 전용 라우팅을 사용하면 설명 된 시나리오에 이러한 사례가 적용되지 않을 수 있습니다.

나머지 케이스는 sysmessages에서 0이 아닌 숫자이거나 0 == ERROR_SUCCESS부터 0이 아니기 때문에 Win32 오류 코드입니다.

실제로 "SSPI 컨텍스트를 만들 수 없습니다."또는 "서버에 요청을 전송할 때 전송 수준 오류가 발생했습니다."또는 "기존 연결이 강제로 닫혔습니다. 원격 호스트 "이며, 이들도 0이 아닌 Win32 오류 코드를 가지고 있습니다.

참조 : https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror.number(v=vs.110).aspx

그것은 SqlException.NumberErrors 배열의 첫 번째 항목의 Number 속성에 대한 동의어이며, 그 배열이 하나 개 이상의 항목을 포함 할 수 있음을 주목할 필요가있을 수 있습니다.

0

내 질문에 답하십시오. 예, 가능합니다. 잡는 코드를 추가했습니다 :

catch (SqlException ex) 
{ 
    for (int i = 0; i < ex.Errors.Count; i++) 
    { 
     this.logger.Error("Index #" + i + "\n" + 
     "Message: " + ex.Errors[i].Message + "\n" + 
     "Error Number: " + ex.Errors[i].Number + "\n" + 
     "LineNumber: " + ex.Errors[i].LineNumber + "\n" + 
     "Source: " + ex.Errors[i].Source + "\n" + 
     "Procedure: " + ex.Errors[i].Procedure + "\n"); 
    }      

    if (ex.Number == 0) 
    { 
     this.logger.Warn("Exception was caught but ex.Number == 0! Changing to -69."); 
     oResults.Add("_ExitCode", "-69"); 
    } 
} 

오늘 기록했습니다.

2017-01-17 08:05:08,282 [r074008903] ERROR ProcessLogger Index #0 
Message: A severe error occurred on the current command. The results, if any, should be discarded. 
Error Number: 0 
LineNumber: 0 
Source: .Net SqlClient Data Provider 
Procedure: 

2017-01-17 08:05:08,282 [r074008903] ERROR ProcessLogger Index #1 
Message: A severe error occurred on the current command. The results, if any, should be discarded. 
Error Number: 0 
LineNumber: 0 
Source: .Net SqlClient Data Provider 
Procedure: 

2017-01-17 08:05:08,283 [r074008903] WARN ProcessLogger Exception was caught but ex.Number == 0! Changing to -69. 

_ExitCode를 사용하여이 특정 상황에서 잘못된 것이 있는지 확인하기 때문에 잘못된 정보가 있습니다.