実行されたストアドプロシージャである最後に実行されたクエリを確認できましたが、SPが呼び出されたパラメーター値を取得できませんでした。むしろ私は次のものを得ました:
StoredProcedureName;1
次のコマンドから:
DBCC INPUTBUFFER(SPID)
ObjectExplorer->Management->ActivityMonitorで表示してSPIDを取得した場所
SPが実行されたパラメータを含む完全なテキストを取得する方法はありますか?
実行されたストアドプロシージャである最後に実行されたクエリを確認できましたが、SPが呼び出されたパラメーター値を取得できませんでした。むしろ私は次のものを得ました:
StoredProcedureName;1
次のコマンドから:
DBCC INPUTBUFFER(SPID)
ObjectExplorer->Management->ActivityMonitorで表示してSPIDを取得した場所
SPが実行されたパラメータを含む完全なテキストを取得する方法はありますか?
この答えはあなたが探しているものではないかもしれません.あなたの質問に実際には答えていないので.
クエリの数とプログラムの大きさはわかりませんが、デバッグの目的で、プレーン テキストとストアド プロシージャの両方で、すべてのクエリに対して同様のことを行いたいと考えていました。そこで、パラメータの有無にかかわらず、プレーン テキスト クエリ/ストアド プロシージャを実行できる単純なラッパー クラスを作成しました。次に、例外が発生した場合は、それをトラップし、元の例外に加えて実行されたクエリとすべてのパラメーターを使用して新しいカスタム例外を作成し、カスタム メッセージですべてを返します。ラッパーで 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