Поиск хранимой процедуры, используемой Crystal Report

Мне нужно получить имя хранимой процедуры, в которой запущен отчет Crystal. Есть ли способ сделать это в C# с помощью объекта CrystalDecisions.CrystalReports.Engine.ReportDocument?

Я не могу найти свойство, которое даст мне имя хранимой процедуры.

Это вообще возможно? Я прошел почти все свойства, которые я могу придумать. У объекта DataDefinition есть коллекции для полей формулы, параметра, имени группы и промежуточных итогов, но не для коллекций полей базы данных.

Изменить: мне нужно сделать это программно, так как у меня много отчетов. Мне нужна возможность пропустить фактический запуск отчета и просто выполнить хранимую процедуру, которую использовал бы отчет. Поэтому, когда информация отчета вставляется в базу данных с помощью программы, я хочу иметь возможность извлечь ее хранимую процедуру и сохранить эту информацию отдельно.

4 ответа

Решение

Ты будешь пинать себя. ИП в...

ReportDocument.Database.Tables

База данных

затем Table.Location

Таблица

также не забывайте о SubReports... который является еще одной коллекцией ReportDocuments.

Вы можете использовать SQLServer Profiler для захвата того, какая хранимая процедура вызывается при запуске отчета Crystal.

Во-первых, вам нужно иметь необходимые права для запуска профилировщика.
Во-вторых, вам нужно запустить трассировку и немедленно выполнить отчет.
В-третьих, остановите трассировку и сканирование, чтобы увидеть имя хранимой процедуры, выполненной в отчете.

Попробуйте этот проект: RptToXml.

Вы можете вывести различные свойства таблицы с этим кодом (извините, это в VB, это то, что я должен использовать для этого проекта):

Закрытая подпрограмма logLogOnInfo(таблица в виде таблицы) log.DebugFormat("LogOnInfo.ConnectionInfo для {0}:", table.Name) DIM CI As ConnectionInfo = table.LogOnInfo.ConnectionInfo log.Debug(String.Format("AllowCustomConnection: {0") }, DBName: {1}, IntegratedSecurity: {2}", ci.AllowCustomConnection, ci.DatabaseName, ci.IntegratedSecurity)) log.Debug(String.Format("ServerName: {0}, пользователь: {2}, пароль): {1}, Атрибуты: ", ci.ServerName, ci.Password, ci.UserID))

For Each a As NameValuePair2 In ci.Attributes.Collection
    If a.Name = "QE_LogonProperties" Then
        Dim attributes As DbConnectionAttributes = a.Value
        For Each b As NameValuePair2 In attributes.Collection
            log.DebugFormat("        {0}: {1}", b.Name, b.Value)
        Next
    Else
        log.DebugFormat("    {0}: {1}", a.Name, a.Value)
    End If
Next

End Sub

Другие вопросы по тегам