2009-10-21 77 views
3

我有一堆報告作爲RDL部署到SSRS。由於高安全性要求,db密碼變化非常頻繁。要跟上這些變化,並在數十次報告中修改數十項變成一項艱鉅的任務。這導致我的問題...SQL報告服務 - 以編程方式設置數據源?

是否有可能以編程方式爲已部署的報告設置數據源或連接字符串?

  • 這樣做是否可以使用應用程序來修改報告本身,因爲它位於服務器上?

  • 這可以通過在DS位於服務器上時從應用程序修改共享數據源來完成嗎?

  • 是否可以通過在報告中嵌入腳本來完成從Web服務檢索連接的腳本?

感謝

回答

4

這可以通過多種方式來完成,我認爲最簡單的一種是使用SSRS Web服務的API。 Web服務允許您操縱所有報告實體,包括Data Sources

作爲此問題的解決方案,每次數據庫密碼更改(甚至使用某種觸發器自動執行它)時,都可以使用對Web服務的調用來更新數據源憑據。

我在一個項目中做了類似的工作,其中RDL和數據源必須在運行時生成,部署和操作,並且工作良好,因此更新數據源必須可行。

0

爲您的報告服務端點添加項目的服務引用(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); 
      } 
     } 
    } 
相關問題