虽然我已经能够看到最后运行的查询是执行的存储过程,但我没有得到调用 SP 的参数值。相反,我得到了以下信息:
StoredProcedureName;1
从以下命令:
DBCC INPUTBUFFER(SPID)
通过在 ObjectExplorer->Management->ActivityMonitor 中查看 SPID
有什么方法可以获得完整的文本,包括执行 SP 的参数?
虽然我已经能够看到最后运行的查询是执行的存储过程,但我没有得到调用 SP 的参数值。相反,我得到了以下信息:
StoredProcedureName;1
从以下命令:
DBCC INPUTBUFFER(SPID)
通过在 ObjectExplorer->Management->ActivityMonitor 中查看 SPID
有什么方法可以获得完整的文本,包括执行 SP 的参数?
我知道这个答案可能不是您要找的,因为它并没有真正回答您的问题,所以我想了一下,最终认为这可能会有所帮助。
我不知道您有多少查询以及您的程序有多大...但是出于调试目的,我想对所有查询(纯文本和存储过程)执行类似的操作。所以我写了一个简单的包装类,让我可以执行带参数和不带参数的纯文本查询/存储过程。然后,如果发生 execption,我会捕获它,使用原始异常加上已执行的查询和所有参数构建一个新的自定义异常,并在自定义消息中将其全部返回。我在包装器中使用 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