最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络上众多的资源找到了解决方案,即Data Processing Extensio(DPE)。所谓DPE,直白地说就是开发自己的DLL去扩展SSRS的数据源,具体的操作如下所示:
1. 新建类库项目,并引入以下两个DLL:
C:\Program Files\Microsoft SQL Server\MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.ReportingServices.Interfaces.dll
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll
2. 根据参数获取Connection String:新建DBConnection类文件,实现接口IDbConnectionExtension并且重写其中的方法:
A. SetConfiguration():主要是实现读取数据库连接的配置文件:
public void SetConfiguration(string configuration) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(configuration); string ConfigFilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + xmlDoc.ChildNodes[0].Attributes["configSource"].InnerText; ExeConfigurationFileMap file = new ExeConfigurationFileMap(); file.ExeConfigFilename = ConfigFilePath; Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); foreach (ConnectionStringSettings cf in config.ConnectionStrings.ConnectionStrings) { connectionStrings.Add(cf.Name, cf.ToString()); } }