2011-01-28 78 views
9

可能重複:
Obtain the Query/CommandText that caused a SQLException如何獲得在C#中導致SqlException的實際SQL?

我的一些錯誤處理代碼的工作(使用ELMAH)和默認設置只發送錯誤信息。我想知道引發錯誤的實際SQL(即「SELECT * FROM thisTableDoesNotExist」)

這是我到目前爲止有:

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。數據庫是SQL Server 2008,SqlException的類型是System.Data.SqlClient.SqlException

回答

5

不可能。您需要捕獲執行了SQL命令的異常,然後將您的命令文本包含在您自己的自定義異常中。見Obtain the Query/CommandText that caused a SQLException

+0

您可能還會在引用的答案中包含代碼 – 2011-01-28 22:47:13

+1

這是否使其成爲該問題的重複? – 2011-01-28 22:51:49

1

檢查異常的最好方法是在發生異常的代碼中放置一個斷點,並檢查異常對象圖的值。

嘗試InnerException這樣的信息員:

sqlEx.InnerException.Message 

它可能不會提供失敗,但可能會給你更具體的信息,如操作和表名確切的SQL。 StackTrace成員也可能有一些信息。

1

你可能在你的SQL中有錯誤處理代碼,當它遇到錯誤時,你可以發送它試圖用打印或返回語句運行的SQL,或者你想把它返回給你的應用程序。

+0

該問題的最佳解決方案。其他答案是正確的,但這是一個合法的(而不是hacky)解決方法。 – Crisfole 2011-01-28 22:47:46

相關問題