Sql Report Services - программная настройка источника данных? - PullRequest
3 голосов
/ 21 октября 2009

У меня есть куча отчетов, развернутых как RDL на SSRS. Из-за высоких требований безопасности пароли БД меняются очень часто. Это стало огромной задачей, чтобы идти в ногу с изменениями и изменять десятки отчетов. Это приводит к моему вопросу ...

Можно ли программно установить источник данных или строку подключения для развернутого отчета?

  • Можно ли это сделать с помощью приложения, которое изменяет что-то в самом отчете, когда оно находится на сервере?

  • Может ли это быть сделано путем изменения общего источника данных из приложения, когда DS находится на сервере?

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

Это можно сделать несколькими способами, я думаю, что одним из самых простых является использование API веб-службы SSRS. Веб-сервис позволяет вам управлять всеми объектами отчетности, включая Источники данных .

В качестве решения этой проблемы можно обновлять учетные данные источников данных с помощью обращений к веб-службе при каждом изменении пароля БД (даже автоматизировать его с помощью какого-либо триггера?).

Я сделал нечто подобное в проекте, где RDL и источники данных нужно было генерировать, развертывать и манипулировать во время выполнения, и это работало нормально, поэтому обновление источника данных должно быть возможным.

0 голосов
/ 07 марта 2013

Добавьте ссылку на службу в свой проект для конечной точки службы отчетов (http://ReportServerHost.mydomain.tld/ReportServer/ReportService2005.asmx). Используйте следующий код для изменения пароля источника данных:

    public static void ChangeDataSourcePassword(string dataSourcePath, string password)
    {
        using (ReportingService2005SoapClient reportingService = new ReportingService2005SoapClient())
        {
            reportingService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

            try
            {  
                ServerInfoHeader serverInfo = null;
                DataSourceDefinition dataSourceDefinition = null;

                serverInfo = reportingService.GetDataSourceContents(dataSourcePath, out dataSourceDefinition);
                dataSourceDefinition.Password = password;
                serverInfo = reportingService.SetDataSourceContents(null, dataSourcePath, dataSourceDefinition);
            }
            catch (FaultException ex)
            {
                // Do something with the exception. Rethrow it and/or show it to the user.
                Console.WriteLine(string.Format("Failed to change the password on {0}: {1}", dataSourcePath, ex.Message));
                throw new ApplicationException("Failed to change the password on the Data Source.", ex);
            }
        }
    }
...