【问题标题】:How to view the last ran sql query from SqlClient data provider on Sql server 2000?如何从 Sql server 2000 上的 SqlClient 数据提供程序查看上次运行的 sql 查询?
【发布时间】:2011-03-22 00:40:52
【问题描述】:

虽然我已经能够看到最后运行的查询是执行的存储过程,但我没有得到调用 SP 的参数值。相反,我得到了以下信息:

StoredProcedureName;1

来自以下命令:

DBCC INPUTBUFFER(SPID)

我在 ObjectExplorer->Management->ActivityMonitor 中查看 SPID 的位置

有什么方法可以获取完整的文本,包括执行 SP 的参数?

【问题讨论】:

    标签: asp.net sql sql-server-2000 sqlclient


    【解决方案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
    

    【讨论】:

    • 其实,我一直在寻找它以方便调试,这样我就可以得到执行准确语法的sql,而无需去visual studio复制异常消息并在sql server中执行.
    • 我就是这样使用它的。当抛出异常时(我使用 ASP.Net),我会在屏幕上得到完整的异常以及带有所有参数的完整查询。然后我将它们复制到 Toad/SQL Server Management Studio 并手动执行它(如果我不能仅仅通过查看它就知道它为什么坏了)。我的回答有帮助吗?或者有什么方法可以修改它吗?
    猜你喜欢
    • 2014-04-09
    • 2015-05-13
    • 2017-10-20
    • 2011-11-20
    • 2013-08-03
    • 1970-01-01
    • 2011-08-18
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多