技术开发 频道

教程7: 使用 .NET Framework 生成 RDL



     【IT168 技术文档】本教程阐释了如何使用 XmlTextWriter 类将报表定义语言 (RDL) 写入报表定义文件。XmlTextWriter 不仅提供了生成这类 XML(即 RDL)的快速方法(这种方法不允许返回操作),而且还帮助您生成符合 RDL 规范的报表定义文档。XmlTextWriter 写入流,而不是使用对象模型(如 XML DOM),从而提供了更好的性能。
    通常,如果您需要在没有 DOM 开销的情况下将 XML 作为原始数据编写,则可以使用 XmlTextWriter。XmlTextWriter 是 XmlWriter 类的实现,该类提供将 XML 写入文件流的 API。XmlTextWriter 类提供了几种创建报表定义文件的方法。以下教程着重向您显示如何使用 WriteStartElement、WriteAttributeString、WriteElementString 和 WriteEndElement 方法构造报表定义文件。
在本教程的课程中,您将完成下列活动:
•        使用“Visual Studio 控制台应用程序”项目模板创建一个应用程序。
•        添加与 AdventureWorks 示例数据库的连接。
•        编写检索数据源字段列表的代码。
•        编写代码,以生成可用于生成报表的简单报表定义文件。
1:创建 RDL 生成器 Visual Studio 项目   
针对本教程,您将创建一个简单控制台应用程序。本教程假定您是在 Microsoft Visual Studio .NET 环境中进行开发的。
创建控制台应用程序
1.        在“文件”菜单中,指向“新建”,再单击“项目”以打开“新建项目”对话框。
2.        展开“Visual Basic 项目”或“Visual C# 项目”文件夹。
3.        单击“控制台应用程序”图标。
4.        在“名称”框中,输入您项目的名称。键入名称 SampleRDLGenerator。
5.        在“位置”框中,输入保存项目的路径,或单击“浏览”导航到所需文件夹。
6.        单击“确定”。解决方案资源管理器中将显示您项目的折叠视图。
在解决方案资源管理器中,展开该项目节点。默认名称为 Program.cs(在 Visual Basic 中为 Module1.vb)的代码文件已添加到您的项目中。
第 2 课:创建与示例数据库的连接   
第一步是创建与 AdventureWorks 示例数据库的连接,以生成报表定义的字段列表。
创建与 AdventureWorks 的连接
1.        请用以下代码替换您项目中 OpenConnection() 方法的代码:
Visual Basic  复制到剪贴板
Public Sub OpenConnection() ' Create a connection object m_connection = New SqlConnection() ' Create the connection string m_connectString = "data source=localhost;initial catalog=AdventureWorks;integrated security=SSPI" m_connection.ConnectionString = m_connectString ' Open the connection m_connection.Open() End Sub 'OpenConnection
C#  复制到剪贴板
public void OpenConnection() { // Create a connection object m_connection = new SqlConnection(); // Create the connection string m_connectString = "data source=localhost;initial catalog=AdventureWorks;integrated security=SSPI"; m_connection.ConnectionString = m_connectString; // Open the connection m_connection.Open(); }
注意:

    您应该使用对特定配置有效的连接字符串替换此处使用的连接字符串。前面的连接字符串假定您已将 AdventureWorks 数据库安装到 SQL Server 的本地实例中。
3:检索报表定义的字段列表   
由于每个报表定义都应该具有字段(表示报表数据)列表,因此,您必须从查询生成字段列表。
生成字段列表
1.        请用以下代码替换您项目中 GenerateFieldsList() 方法的代码:
Visual Basic  复制到剪贴板
Public Sub GenerateFieldsList() Dim command As SqlCommand Dim reader As SqlDataReader ' Executing a query to retrieve a fields list for the report command = m_connection.CreateCommand() m_commandText = "SELECT Person.CountryRegion.Name AS CountryName, Person.StateProvince.Name AS StateProvince " + "FROM Person.StateProvince " + "INNER JOIN Person.CountryRegion ON Person.StateProvince.CountryRegionCode = Person.CountryRegion.CountryRegionCode " + "ORDER BY Person.CountryRegion.Name" command.CommandText = m_commandText ' Execute and create a reader for the current command reader = command.ExecuteReader(CommandBehavior.SchemaOnly) ' For each field in the resultset, add the name to an array list m_fields = New ArrayList() Dim i As Integer For i = 0 To reader.FieldCount - 1 m_fields.Add(reader.GetName(i)) Next i End Sub 'GenerateFieldsList
C#  复制到剪贴板
public void GenerateFieldsList() { SqlCommand command; SqlDataReader reader; // Executing a query to retrieve a fields list for the report command = m_connection.CreateCommand(); m_commandText = "SELECT Person.CountryRegion.Name AS CountryName, Person.StateProvince.Name AS StateProvince " + "FROM Person.StateProvince " + "INNER JOIN Person.CountryRegion ON Person.StateProvince.CountryRegionCode = Person.CountryRegion.CountryRegionCode " + "ORDER BY Person.CountryRegion.Name"; command.CommandText = m_commandText; // Execute and create a reader for the current command reader = command.ExecuteReader(CommandBehavior.SchemaOnly); // For each field in the resultset, add the name to an array list m_fields = new ArrayList(); for (int i = 0; i <= reader.FieldCount - 1; i++) { m_fields.Add(reader.GetName(i)); } }

4:创建生成报表定义文件的代码   
您已经创建了连接,检索了查询的字段列表,现在可以使用 XmlTextWriter 通过编程方式生成 RDL。
通过编程方式生成 RDL
1.        请用以下代码替换您项目中 GenerateRdl() 方法的代码:
Visual Basic  复制到剪贴板
(See attachment code)
C#  复制到剪贴板
(See attachment code)
5:运行 RDL 生成器应用程序 (VB/C#)   
Visual Studio 提供了几种从 IDE 生成和运行控制台应用程序的方法,例如:
•        开始执行(调试)
•        开始执行(不调试)
生成并运行 GetProperties 示例
1.        在“调试”菜单中,单击“开始执行(不调试)”。该操作可确保控制台窗口在程序执行完毕后保持打开状态。
应用程序将以下输出内容打印到控制台:
复制到剪贴板
RDL file generated successfully.
注意:

在 Visual Basic 中,您可能会收到一条编译器错误:在 SampleRDLGenerator.SampleRDLGenerator.Module1 中找不到“Sub Main”。如果收到这条错误,请在“任务列表”中双击该错误消息。将出现“启动对象”对话框。选择 SampleRDLGenerator.SampleRDLGenerator.RdlGenerator,再单击“确定”按钮。重新生成项目。
2.        按任意键关闭 SampleRdlGenerator。
注意:

发生的所有错误都将写入控制台。
3.        名为 Report1.rdl 的文件将写入运行控制台应用程序的目录。
0
相关文章