Как просмотреть последний запущенный sql-запрос от поставщика данных SqlClient на сервере Sql 2000?

Хотя я смог увидеть последний запущенный запрос, который является выполненной хранимой процедурой, но я не получил значения параметров, с которыми был вызван SP. Вернее у меня получилось следующее:

StoredProcedureName;1

из следующей команды:

DBCC INPUTBUFFER(SPID)

Откуда я взял SPID, просмотрев его в ObjectExplorer->Management->ActivityMonitor

Можно ли как-нибудь получить полный текст, включая параметры, с которыми выполнялась SP?


person teenup    schedule 28.07.2010    source источник


Ответы (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
person Peter    schedule 28.07.2010
comment
На самом деле, я искал это, чтобы сделать отладку удобной, чтобы я получал sql с точным синтаксисом, и мне не нужно было идти в визуальную студию, копировать сообщение об исключении и выполнять его на сервере sql. - person teenup; 29.07.2010
comment
Вот как я это использую. Когда возникает исключение (я использую ASP.Net), я получаю полное исключение плюс полный запрос со всеми параметрами прямо на экране. Затем я копирую их в Toad/SQL Server Management Studio и запускаю вручную (если я не вижу, просто взглянув на него, почему он сломался). Помогает ли мой ответ или есть способ изменить его, чтобы он работал? - person Peter; 29.07.2010