Поиск хранимой процедуры, используемой Crystal Report
Мне нужно получить имя хранимой процедуры, в которой запущен отчет Crystal. Есть ли способ сделать это в C# с помощью объекта CrystalDecisions.CrystalReports.Engine.ReportDocument?
Я не могу найти свойство, которое даст мне имя хранимой процедуры.
Это вообще возможно? Я прошел почти все свойства, которые я могу придумать. У объекта DataDefinition есть коллекции для полей формулы, параметра, имени группы и промежуточных итогов, но не для коллекций полей базы данных.
Изменить: мне нужно сделать это программно, так как у меня много отчетов. Мне нужна возможность пропустить фактический запуск отчета и просто выполнить хранимую процедуру, которую использовал бы отчет. Поэтому, когда информация отчета вставляется в базу данных с помощью программы, я хочу иметь возможность извлечь ее хранимую процедуру и сохранить эту информацию отдельно.
4 ответа
Ты будешь пинать себя. ИП в...
ReportDocument.Database.Tables
затем Table.Location
также не забывайте о SubReports... который является еще одной коллекцией ReportDocuments.
Вы можете использовать SQLServer Profiler для захвата того, какая хранимая процедура вызывается при запуске отчета Crystal.
Во-первых, вам нужно иметь необходимые права для запуска профилировщика.
Во-вторых, вам нужно запустить трассировку и немедленно выполнить отчет.
В-третьих, остановите трассировку и сканирование, чтобы увидеть имя хранимой процедуры, выполненной в отчете.
Вы можете вывести различные свойства таблицы с этим кодом (извините, это в 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