2010-07-28 21 views

回答

1

我知道這個答案可能不是你要找的,因爲它沒有真正回答你的問題,所以我思考了一下,最終認爲這可能有幫助。

我不知道你有多少個查詢以及你的程序有多大......但爲了調試的目的,我想爲我的所有查詢都做類似的事情,包括純文本和存儲過程。所以我寫了一個簡單的包裝類,讓我可以執行純文本查詢/存儲過程,無論參數和沒有參數。然後,如果發生錯誤,我將其捕獲,使用原始異常以及執行的查詢和所有參數構建一個新的自定義異常,並將其全部返回到自定義消息中。我在我的包裝使用Oracle,但它幾乎完全一樣:

Public Function ExecuteCommandQuery(ByRef oCMD As OracleClient.OracleCommand) As DataTable 
    oCMD.Connection = _oConn 

    Dim dt As New DataTable 

    'exception if one occured' 
    Dim DBException As Exception = Nothing 

    Try 
     'get an adapter' 
     Dim cmd As New OracleDataAdapter(oCMD) 
     'Fill the data table and ket a count of records returned' 
     cmd.Fill(dt) 

    Catch ex As Exception 
     'capture exception, and rethrow after properly closing the Oracle Connection' 
     DBException = ex 
    Finally 
     _oConn.Close() 
    End Try 

    'if exception occured, rethrow' 
    If DBException IsNot Nothing Then 
     Throw New Exception(_ 
      String.Format("A database error occured: {0} " + _ 
          Environment.NewLine + Environment.NewLine + " --- " + _ 
          Environment.NewLine + Environment.NewLine + _ 
          " Your query: {1}" + _ 
          Environment.NewLine + Environment.NewLine + " --- " + _ 
          Environment.NewLine + Environment.NewLine + _ 
          " Your Parameters: " + Environment.NewLine + "{2}" _ 
          , DBException.ToString(), oCMD.CommandText, GenerateParameterErrorInfo(oCMD))) 
    End If 

    Return dt 
End Function 
+0

其實,我一直在尋找它,使調試方便,使我得到執行的確切語法的SQL,並且不需要去visual studio並複製異常消息並在sql server中執行它。 – teenup 2010-07-29 04:18:56

+0

這就是我使用它的方式。當拋出一個異常時(我使用ASP.Net),我會在屏幕上看到完整的異常以及全部查詢的全部參數。然後,我將它們複製到Toad/SQL Server Management Studio中並手動執行它(如果我只是通過查看它爲什麼不能看到它)。 我的回答是否有幫助,或者我有修改它的方法嗎? – Peter 2010-07-29 13:17:22

相關問題