2011-01-28 3 views
9

가능한 중복 : 나는 몇 가지 오류 처리 코드 일하고
Obtain the Query/CommandText that caused a SQLExceptionC#에서 SqlException을 일으킨 실제 SQL을 어떻게 얻을 수 있습니까?

(ELMAH를 사용) 기본 설정은 오류 메시지를 보냅니다.

if (e.Error.Exception is SqlException) 
{ 
    //if SQL exception try to give some extra information 
    SqlException sqlEx = e.Error.Exception as SqlException; 
    e.Mail.Body = e.Mail.Body + "<div>" + 
           "<h1>SQL EXCEPTION</h1>" + 
           "<b>Message</b>: " + sqlEx.Message + 
           "<br/><b>LineNumber:</b> " + sqlEx.LineNumber + 
           "<br/><b>Source:</b> " + sqlEx.Source + 
           "<br/><b>Procedure:</b> " + sqlEx.Procedure + 
           "</div>"; 
} 

을 그리고 나는 또한 보여줄 수 있도록하고 싶습니다 : 나는 오류가 발생합니다 실제 SQL을 알고 싶습니다 이것은 내가 지금까지 무엇을 가지고

(예 : "* thisTableDoesNotExist에서 선택") 실제 SQL. 데이터베이스는 SQL Server 2008이며 SqlException 유형은 System.Data.SqlClient.SqlException입니다.

답변

5

불가능합니다. SQL 명령이 실행 된 곳의 예외 상황을 파악한 다음 사용자 지정 예외에 명령 텍스트를 포함시켜야합니다. Obtain the Query/CommandText that caused a SQLException을 참조하십시오.

+0

참조 된 대답에 코드를 포함시킬 수도 있습니다. –

+1

그러면이 질문과 중복되지 않습니까? –

1

예외를 검사하는 가장 좋은 방법은 예외가 발생하는 코드에 중단 점을 넣고 예외 개체 그래프의 값을 검사하는 것입니다.

sqlEx.InnerException.Message 

그것은 실패했지만 같은 작동 및 테이블 이름으로 당신에게 더 구체적인 정보를 제공 할 수 있습니다 정확한 SQL을 제공하지 않을 수 있습니다

는 메시지의이 같은 InnerException의 회원을보십시오. StackTrace 회원은 또한 약간의 정보가있을 수 있습니다.

1

SQL에서 오류 처리 코드가있을 수 있으며 오류가 발생하면 print 또는 returns 문으로 실행하려고 시도한 SQL을 되돌려 보내거나 응용 프로그램으로 반환 할 수 있습니다.

+0

이 문제에 대한 최선의 해결책. 다른 대답은 사실이지만 이것은 합법적 인 (해커가 아닌) 해결책입니다. – Crisfole

0

C# 측에 충분한 정보를 얻을 수 없다면 "SQL 프로파일 러"(완전한 MS SQL의 일부)를 사용하여 실행 된 명령을 확인할 수 있습니다.

SQL 프로파일 러 http://msdn.microsoft.com/en-us/library/ms181091.aspx에 대한 정보입니다. 프로파일 러가없는 경우에도 기본 추적 API를 사용할 수 있어야합니다. http://msdn.microsoft.com/en-us/library/ms191006.aspx

+0

SQLExceptions은 MS-SQL 이외의 다른 데이터 공급자가 throw 할 수 있습니다. –