SSRS报告部署与数据源引用更新指南

在企业环境中,SSRS(SQL Server Reporting Services)报告的部署是一个重要的开发环节。本文将介绍如何使用VB.NET部署SSRS报告,并更新报告中的数据源引用。

报告部署

SSRS报告可以通过调用rs.CreateReport()方法进行部署。这个方法接受一个字节数组作为参数,而不是.rdl文件名。虽然这看起来是一个小变化,但读取文件内容并不困难。以下是VB.NET的示例代码:

Dim len As Integer Dim fileBytes As Byte() Using stream As FileStream = File.OpenRead(path) len = stream.Length fileBytes = New Byte(len - 1) {} stream.Read(fileBytes, 0, len) End Using rs.CreateReport("MyReport", "Reports Folder", overwrite, fileBytes, Nothing)

如果Microsoft没有在上述链接中的错误示例中遗漏读取流的最后一个字节,那么这个过程会更加简单。有趣的是,在SQL 2000示例中,他们错误地初始化了数组,导致向SSRS服务器发送了额外的字节。结果是服务器抱怨报告末尾有非法的0×00字符。

在VB.NET中,数组中的元素数量与在Dim中指定的数量不同,这似乎很难理解,即使是对Microsoft的人来说也是如此。更新数据源引用是另一个难题。

更新数据源引用

报告定义中存储的数据源引用是无效的。按照上述方法上传报告后,将收到类似的警告:

数据集 `DataSet1' 引用了共享数据源 `MyDataSource',该数据源未在报告服务器上发布。

HTTP流量嗅探显示,当BIDS部署报告时,它也会收到相同的警告。解决方案是在报告上传后更新数据源引用,将它们更改为"/Data Sources"文件夹中现有的数据源。

这需要几个步骤。首先,需要将报告文件加载为XML并定位所有的数据源引用。

Dim doc As System.Xml.XmlDocument = New System.Xml.XmlDocument() doc.Load(rdlPath) Dim nsManager As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable) nsManager.AddNamespace("r", "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition") Dim nodes As XmlNodeList = doc.SelectNodes("/r:Report/r:DataSources/r:DataSource/r:DataSourceReference", nsManager)

然后,需要将这些节点转换为SSRS识别的DataSource对象:

Dim dataSources As DataSource() = New DataSource(nodes.Count - 1) {} For i As Integer = 0 To nodes.Count - 1 dataSources(i) = CreateDataSourceObj(nodes.Item(i)) Next

最后,需要调用rs.SetItemDataSources方法:

rs.SetItemDataSources(serverReportPath, dataSources)

创建报告的完整代码可以在找到。创建数据源和报告的组合文件可以在找到。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485