2010-02-15 2 views
6

.NET 3.5 응용 프로그램의 로그에 SqlException이 표시되고 해당 번호 (속성 값 : SqlException.Number)를 찾고 있습니다.올바르게 캐치하는 방법 : 전송 수준의 오류가 발생했습니다.

나는 또한 같은 오류가 점점 오전
System.Data.SqlClient.SqlException: A transport-level error has occurred 
when receiving results from the server. (provider: TCP Provider, error: 0 
- The specified network name is no longer available.) at 
System.Data.SqlClient.SqlConnection.OnError 

:

System.Data.SqlClient.SqlException: A network-related or instance-specific error 
occurred while establishing a connection to SQL Server. The server was not found 
or was not accessible. Verify that the instance name is correct and that SQL Server 
is configured to allow remote connections. 

사람이 제대로 그 예외를 포착하는 방법을 알고 있나요? (당신은 또한 대답을 게시 할 수 있습니다 here)

답변

5

이 오류는 SQL Server의 sys.messages에서 가져 오지 않았습니다. 연결에 문제가 있기 때문입니다. 그래서 나는 넘겨 줄 사람이 없습니다.

TBH, 당신이해야 할 가장 좋은 것은 번호가 예외와 함께 로그에 쓰여지는 것입니다. 즉, 로그에 숫자와 메시지가 항상 나란히 표시됩니다. 귀하의 현재 질문에 대답 할 수는 없지만 최선의 IMHO가 될 것입니다. SqlException.Number뿐 아니라 SqlException.ErrorCode도 있습니다.이 경우에는 .ErrorCode이 실제로 필요한 것일 수 있습니다 (확인하지 않은 경우).

4

이 하나에 대한 연결된 SQL 오류 번호를 찾을 수 없습니다 - 단순히 넣어, 서버에 연결하는 데 문제가 있었기 때문에 오류가 발생합니다.

코드를 SQL Server에 연결할 수 없으므로 SQL 오류를보고하지 않습니다. MSDN 문서에서

SQLException.Number에 대한 : 관련 SQL 오류 번호가없는 예외, 당신은 ErrorCode 속성에있을 것입니다 윈도우 HRESULT 에러 코드를 사용할 수 있습니다에 대한

This number corresponds to an entry in the master.dbo.sysmessages table.

예외 오브젝트의

+0

이 오류를 잡는 "안전한"방법은 무엇입니까? Windows Azure에서 응용 프로그램을 개발하고 있으며 이러한 종류의 오류는 재시도 정책에 의해 포착되어야합니다. –

+0

'서버에서 결과를 수신 할 때'A 전송 수준 오류가 발생했습니다. '와 같은 오류 메시지를 구문 분석하고 적절하게 결정해야합니다. – Oded

+3

흠, 정말 못 생겼어. 특히, 지역화 된 (프랑스어) 오류 메시지를 던지는 일이 내 컴퓨터에서 작동하지 않습니다 ... –

2

여러분, 실제 예외 스택을 검토하여 SqlException에 .Number가 없다고 맹목적으로 주장하기 전에 일부 MSDN 페이지에 상용구 텍스트가 있기 때문에 확인하십시오. .ErrorCode는 일반적으로 하나의 일반 값 (개인용 CTOR에 의해 설정 됨)을 가져옵니다. 이 patricular 오류를 들어 여기에 예외 스택 볼 수 있습니다

http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/cb61ec85-c0d4-4a26-90e0-8c98cd28332f

을 당신이 그것을 따르는 경우에 당신은 준비하고하는 것은 코드가 모든 것을 채워 것을 볼 수 있지만, 반사에 실제로 사용 오류 번호를 추적 뒤얽힌 약간의 .

그럼 누구든지 실제 오류 번호 (또는 숫자)를 게시합니다. 이러한 오류는 매우 드물고 일시적인 경향이 있으며 서버에 연결 문제가 발생했을 때 너무 늦어서 번호를 추적 할 수 없기 때문에 숫자가있는 것이 좋습니다.

관련 문제