65.9K
CodeProject 正在变化。 阅读更多。
Home

Microsoft Reporting Services 2005 的新报告前景

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.65/5 (50投票s)

2006年5月18日

5分钟阅读

viewsIcon

180486

downloadIcon

922

如何使用 WebService 作为数据源来构建 Microsoft Reporting Services 2005 报表。

引言

几个月前,我参与了对 Microsoft Reporting Services 2005 为开发人员提供的新选项的测试和评估,以创建更好的报表。其中一个选项是能够使用一个或多个 WebService 作为数据源的强大功能。不幸的是,MSDN 附带的帮助文档和 MS SQL Server 2005 书籍不够清晰,并且帮助文档中存在一些印刷错误。这些错误给开发人员带来了困难,开发人员可能会花费大量时间来解决问题。因此,本文旨在分享我对 Microsoft Reporting Services 2005 提供的这一绝佳机会的知识,以节省您的时间。

创建 WebService

我的第一步是创建一个测试 WebService,它将在稍后用作我的测试/演示报表的数据源。这是非常重要的一步,因为在将 DataSet 作为数据源提供之前,我们必须将其转换为 XmlDataDocument。没有这个转换,当我们尝试使用 Webservice 的 web 方法从 AdventureWorks 示例数据库检索数据时,将无法在下一步获得任何结果。此转换在 C# 代码中表示如下:

[WebMethod]
public XmlDataDocument GetPersonAddress(string cityNameID)
{
   //
   // Define the local variables
   //   
   StringBuilder   myQuery           = new StringBuilder();
   XmlDataDocument resultXMLDocument = new XmlDataDocument();
   SqlConnection   myConnection      = new SqlConnection();
   SqlCommand      myCommand         = new SqlCommand();
   SqlDataAdapter  myDA              = new SqlDataAdapter();
   DataSet         myDS              = new DataSet();

   
   //
   // Prepare different query depend from precondition
   //   
   if ((cityNameID != null) && (cityNameID.Trim() != ""))
   {
    myQuery.Append("Select City as City, " + 
                   "AddressLine1 as Address, " + 
                   "PostalCode From Address ");
    myQuery.Append("Where City Like '" + 
                   cityNameID.Trim().Replace("%", "") + 
                   "%' Order By City");
   }
   else
   {
    myQuery.Append("Select City as City, AddressLine1" + 
                   " as Address, PostalCode From Address" + 
                   " Order By City");
   }

   
   //
   // Get connection string and establish connection with server
   //   
   myConnection.ConnectionString = ReadSetting("ConnectionString", "");
   myCommand.Connection          = myConnection;
   myCommand.CommandText         = myQuery.ToString();
   myCommand.CommandType         = CommandType.Text;
   myDA.SelectCommand            = myCommand;

   
   //
   // Return an DataSet with data from our query
   //   
   try
   {
      myDA.Fill(myDS, "Address");
      
      //
      // Here we have to tansform our DataSet
      // into XmlDataDocument before to return it
      //
      XmlDataDocument temporaryXMLDoc = 
                new XmlDataDocument(myDS);
      resultXMLDocument = temporaryXMLDoc;
      temporaryXMLDoc = null;
    }
    catch
    {
       resultXMLDocument = null;
    }
    finally
    {
       myDS.Dispose();
       myDA.Dispose();
       myCommand.Dispose();
       myConnection.Dispose();
       myQuery = null;
    }

   return resultXMLDocument;
}

最后,我们必须构建我们的 Webservice 并将其发布到我们的 IIS 5.0 服务器。因为我们使用的是 VS2005,并且如果您的计算机上安装了 VS2003,请在发布 Webservice 时,检查发布和关联服务的虚拟应用程序/目录是否具有默认设置 Microsoft ASP.2.0

创建和部署使用 WebService 作为数据源的报表

下一步是使用 Microsoft Reporting Services 2005 创建一个报表,该报表将使用我们在第一步中构建和发布的 webservice 作为数据源。要完成此任务,您需要从 Microsoft SQL Server 2005 的安装 CD 中安装 Microsoft Reporting Services。我们将创建一个名为“TestReport”的新空 Reporting Services 项目。之后,我们将添加一个单独的共享数据源。这里,重要的是当您选择 XML 作为数据源类型时,在“常规”选项卡中写入的连接字符串。连接字符串如下所示。另外,您还可以看到我们用来从 Webservice 获取数据的查询。这里“http://madjarov_d_n_demo.org”是我们的服务命名空间。此外,在这里命名您想在 Webservice 中调用的方法也非常重要。在这种情况下,它是“GetPersonAddress”。

图 1 连接字符串

图 2 查询字符串

最后,您可以选择“下一步”并构建报表。MS SQL Server 2005 和 VS2005 Studio 设计器中的最终报表外观如下所示:

图 3

现在,我们的 Webservice 方法 GetPersonAddress(string cityNameID) 中的查询 参数 会怎样?我们当然必须在某处定义并使用它。为了方便起见,Microsoft 提供了一个完美且对开发人员友好的报表引擎。在 Microsoft Reporting Services 2005 的报表中实现参数非常容易。首先,我们必须在设计模式下选择“报表参数”,并添加一个名为“cityNameID”且数据类型为“string”的参数。下图显示了这一点:

图 4

现在,最后一步是将此报表参数与 DataSet 连接起来。为此,我们必须在报表的设计模式下编辑数据源,并创建一个新的 DataSet 参数“cityNameID”,然后将其与“Parameters!cityNameID.Value”(这是我们之前定义的报表参数)逻辑连接。您可以在下图看到此连接:

图 5

现在,我们必须将此报表部署到报表服务器。在此操作之前,您必须确保您的设置“TargetReport Folder”和“TargetReport Server”具有正确的值。您可以在下图看到这些报表项目属性:

图 6

请注意,上图所示的设置是我当前的设置,在您的计算机上,您可能会有不同的设置。现在,我们的测试/演示报表已准备就绪,可以将其部署到合适的报表服务器上。

创建用于我们报表的简单 Web 查看器

我们的最后一个任务是创建一个基于 Web 的查看器应用程序,该应用程序将负责获取报表结果并将其可视化给我们。此外,更重要的是向您展示如何将参数从代码发送到报表。为此,我们必须使用 VS 2005(C#)环境创建一个名为“TestReportWebViewer”的新 Web 项目。只需将“Default.aspx”页面设置为我们新项目的默认页面,然后从“ToolBox”将“Report Viewer”控件添加到我们的页面。设置此控件以获得适当的大小,并按以下方式设置查看器设置:

图 7

请注意,“Reportingpath”和“ReportServerUrl”的设置与我们在上一步中部署的报表的值相同。这一点非常重要,否则我们的报表查看器将无法显示我们的报表。下面是我们的报表查看器组件 Init 事件的源代码:

protected void rptViewer_Init(object sender, EventArgs e)
{ 
 //
 // Create a new report's parameter and set it with inital value "Al"
 //   
 ReportParameter cityID   = new ReportParameter();
 cityID.Name              = "cityNameID";
 cityID.Values.Add("Al"); 
 
 //
 // Setting-up the reportviewer control to use remote mode for processing
 //   
 rptViewer.ProcessingMode = ProcessingMode.Remote;
    
 //
 // Send parameter and initialize the viewer control with correct report.
 //   
 rptViewer.ServerReport.SetParameters(new ReportParameter[] { cityID });
}

最后,我想感谢您的耐心,我希望本文对您真正有用,并在您尝试在 Microsoft Reporting Services 2005 项目中实现 Webservices 作为数据源时为您提供正确的方向。请下载本文的源代码,并仔细查看。

注意:我想特别感谢我最好的同事 Svilen Donev 先生,感谢他宝贵的支持。

© . All rights reserved.