我知道這個答案可能不是你要找的,因爲它沒有真正回答你的問題,所以我思考了一下,最終認爲這可能有幫助。
我不知道你有多少個查詢以及你的程序有多大......但爲了調試的目的,我想爲我的所有查詢都做類似的事情,包括純文本和存儲過程。所以我寫了一個簡單的包裝類,讓我可以執行純文本查詢/存儲過程,無論參數和沒有參數。然後,如果發生錯誤,我將其捕獲,使用原始異常以及執行的查詢和所有參數構建一個新的自定義異常,並將其全部返回到自定義消息中。我在我的包裝使用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
其實,我一直在尋找它,使調試方便,使我得到執行的確切語法的SQL,並且不需要去visual studio並複製異常消息並在sql server中執行它。 – teenup 2010-07-29 04:18:56
這就是我使用它的方式。當拋出一個異常時(我使用ASP.Net),我會在屏幕上看到完整的異常以及全部查詢的全部參數。然後,我將它們複製到Toad/SQL Server Management Studio中並手動執行它(如果我只是通過查看它爲什麼不能看到它)。 我的回答是否有幫助,或者我有修改它的方法嗎? – Peter 2010-07-29 13:17:22