第 2 课:为 Web 服务中的 ADO.NET 数据集定义报表数据集

新建日期: 2006 年 7 月 17 日

在本课中,您将创建到可返回 XML System.Data.DataSet 对象的 Web 服务的数据源连接。您可以创建和部署可返回 XML System.Data.DataSet 对象的 Web 服务,或使用可用的现有 Web 服务。您将定义查询字符串以指定要在 Web 服务返回的 XML System.Data.DataSet 的报表数据集中检索的数据。

对于本教程,Web 服务通过调用存储过程 uspGetEmployeeManagers 来检索 AdventureWorks 示例数据库中的雇员和经理信息。此存储过程接受 EmployeeID 值并生成结果集,该结果集以递归方式为顶级雇员显示雇员经理关系。

过程

创建返回 ADO.NET 数据集的 Web 服务(可选)

  1. 在 Microsoft Visual Studio 中,从**“文件”菜单上单击“新建”,然后单击“网站”**。

    将打开**“新建网站”**对话框。

    Aa337489.note(zh-cn,SQL.90).gif注意:
    如果没有看到“网站”选项,请查看教程:在报表中使用 XML 数据的要求部分。
  2. 在**“模板”窗格中,选择“ASP.NET Web 服务”**。

  3. 在**“位置”**下拉列表中,选择 HTTP

  4. 在**“语言”**下拉列表中,选择 Visual BasicC#

  5. 单击**“浏览”**按钮。

    将打开**“选择位置”**对话框。

  6. 在**“打开网站”窗格中,请确保选中了“本地 IIS”**按钮。

  7. 在网站树控件中,导航到该新网站的父文件夹。

  8. 单击**“创建新 Web 应用程序”**按钮。

  9. 键入网站的名称。

  10. 单击**“打开”**。

  11. 单击**“确定”**。

    您在步骤 4 中所选的编程语言的 App_Code/Service 代码页将在 Visual Studio 中打开,显示示例 WebMethod HelloWorld。

    Aa337489.note(zh-cn,SQL.90).gif注意:
    默认命名空间为 http://tempuri.org/。定义下面的报表数据集时,将在查询中使用该命名空间。如果更改了该默认命名空间,则必须相应地更改查询。
  12. 将下面这两个命名空间引用添加到 Visual Basic 或 C# 源文件的顶部。

    using System.Data;
    using System.Data.SqlClient;
    
    Imports System.Data
    Imports System.Data.SqlClient
    
  13. 将 HelloWorld WebMethod 替换为以下 Visual Basic 或 C# 代码。

    [WebMethod]
    public DataSet  GetEmployeeManagers(String EmployeeID)
    {
      Int32 val = Int32.Parse(EmployeeID);
      DataSet ds = new DataSet("Results");
      try
      {
        if (val < 1)
        val = 1;
        else if (val > 290) val = 290;
        SqlDataAdapter da = new 
    SqlDataAdapter(@"uspGetEmployeeManagers " + val.ToString(),
      @"Data Source=localhost; Initial Catalog=AdventureWorks; " +
      @"Integrated Security=true");
      da.Fill(ds);
      }
      catch (Exception e)
      {
        throw;
      }
      return ds;
     }
    
    <WebMethod()> _
    Public Function GetEmployeeManagers(ByVal EmployeeID As String) As DataSet
      Dim ds As DataSet = New DataSet("Results")
      Try
        Dim val As Integer = Integer.Parse(EmployeeID)
        If (val < 1) Then
           val = 1
        ElseIf (val > 290) Then
           val = 290
        End If
        Dim da As SqlDataAdapter = _
            New SqlDataAdapter("uspGetEmployeeManagers " + _
             val.ToString(), _
           "Data Source=localhost; Initial Catalog=AdventureWorks; " + _
                "Integrated Security=true")
            da.Fill(ds)
        Catch e As Exception
        Throw
      End Try
      Return ds
    End Function
    
  14. 在**“生成”菜单上,单击“生成网站”**。

  15. 在**“生成”菜单上,单击“发布网站”**。

测试已发布的 Web 服务(可选)

  1. 打开 Internet Explorer。

  2. 在**“地址”**栏中,键入 Web 服务 URL。

    例如,https://localhost/XMLTutorial/Service.asmx

    将显示 Web 服务默认页。

  3. 单击 GetEmployeeManagersFromAdventureWorks

  4. 键入介于 1 到 290 之间的 EmployeeID 值。

  5. 单击**“调用”**。

    Web 服务将使用存储过程 uspGetEmployeeManagers 检索包含 AdventureWorks 数据库中雇员经理的数据集。

Aa337489.note(zh-cn,SQL.90).gif注意:
如果收到消息“拒绝了对对象的 Execute 权限”,则必须将 AdventureWorks 存储过程的执行权限授予 ASPNETUser,如下面的过程所示。

授予存储过程的执行权限(可选)

  1. 打开 Microsoft SQL Server Management Studio

  2. 连接到装有 AdventureWorks 示例数据库的**“数据库引擎”**。

  3. 对象资源管理器中,依次展开**“数据库”节点、AdventureWorks 节点、“可编程性”节点和“存储过程”**节点。

  4. 右键单击 dbo.uspGetEmployeeManagers,然后选择**“属性”**。

  5. 在**“选择页”窗格中,单击“权限”**。

  6. 在**“用户或角色”窗格中,单击“添加”**按钮。

  7. 单击**“浏览”**按钮。选择 [ASPNETUser]。

  8. 单击**“确定”**。

    您已经为运行 ASP.NET 的所有人添加了执行 uspGetEmployeeManagers 存储过程的权限。

为 Web 服务定义报表数据集

  1. 启动报表设计器,打开为本教程创建的报表服务器项目。

  2. 在“数据”视图中,选择**“新建数据集”**。键入数据集的名称(例如,XMLWebDataSet)。

  3. 在**“数据集”对话框的“数据源”中,选择“新建数据源”。将显示“数据源”**对话框。

  4. 键入数据源的名称(例如,XMLWebDataSource)。

  5. 在**“类型”**中,选择 XML

  6. 在**“连接字符串”**中,键入以下指向报表服务器 Web 服务的 URL:

    https://localhost/XMLTutorial/Service.asmx

  7. 在**“凭据”选项卡中,选择“使用 Windows 身份验证(集成安全性)”**。

  8. 单击**“确定”以保存更改,并关闭“数据源”**对话框。

  9. 在**“报表”菜单上,单击“报表参数”。此时将打开“报表参数”**对话框。

  10. 单击**“添加”**。

  11. 在**“属性”部分的“名称”**文本框中,键入 EmployeeID

  12. 在**“提示”**文本框中,键入“雇员 ID”。

  13. 单击“确定”。

  14. 在“数据”选项卡中,单击工具栏上的“编辑所选的数据集”(…) 按钮。将打开“数据集”对话框。

  15. 单击“参数”选项卡。

  16. 在**“名称”**列中,键入 EmployeeID

  17. 单击**“值”**文本框打开下拉列表,然后选择 =Parameters!EmployeeID.Value。这样将把数据集参数映射到报表参数。

  18. 单击“确定”。

  19. 在**“数据集”**对话框中,使用在步骤 1 中验证的命名空间版本信息键入以下查询:

    <Query>
        <SoapAction>
            http://tempuri.org/GetEmployeeManagers
        </SoapAction>
        <Method Namespace="http://tempuri.org/" 
            Name="GetEmployeeManagers">
        </Method>
    </Query>
    
  20. 单击工具栏上的**“运行”(!) 按钮。将打开“定义查询参数”**对话框。

  21. 在**“参数值”**列中,输入介于 1 到 290 的 EmployeeID 号。

  22. 单击**“确定”**。该数据集将添加到“数据集”窗口中。

  23. 检查结果集。默认情况下,查询从所有 XML 元素和属性一直到其在数据集中找到的第一个 XML 路径上的叶节点中提取数据。

  24. 将以下 ElementPath 粘贴到“查询”窗格中的 <Query> 标记之后。

    <ElementPath IgnoreNamespaces="True">
        GetEmployeeManagersResponse {}/
        GetEmployeeManagersResult/diffgram{}/
        Results {}/Table 
    </ElementPath>
    

    这将为查询提供一个元素路径,指定要使用哪些元素检索结果集中的数据。这种情况下,节点 GetEmployeeManagersResponse、GetEmployeeManagersResult、diffgram 和 Results 后面的空括号 ({}) 均指示查询跳过这些节点中的数据。不带括号的 Table 节点将指示查询检索该节点的所有节点和属性。

    Aa337489.note(zh-cn,SQL.90).gif注意:
    若要指定为数据集字段集合检索的 Table 元素,请将它们列在 Table 元素的后面并用大括号括起来,如以下示例所示:Table {FirstName, LastName, EmployeeID, ManagerID, RecursionLevel}
  25. 单击**“运行”**(!) 以查看结果集。在 ElementPath 元素中所做的更改将更改查询返回的结果集。

  26. 如果对结果集满意,请单击工具栏上的**“刷新字段”(刷新数据集字段) 按钮。这将保存报表定义并更新“报表数据集”**窗口中的字段视图,以显示您可以使用的所有字段。

后续步骤

您已经成功定义了 Web 服务返回的 XML System.Data.DataSet object 中的报表数据集。处理报表时,从 Web 服务检索来自每个 XML 表元素的数据及其属性。接下来,您将创建嵌入在报表中的 XML 的报表数据集。请参阅第 3 课:从嵌入 XML 数据定义报表数据集

请参阅

概念

Reporting Services 教程

其他资源

为 XML 数据定义报表数据集
连接数据源
定义报表数据集
如何创建或编辑报表特定数据源(报表设计器)
如何创建数据集(报表设计器)
使用报表数据集中的字段
如何在“数据集”窗口中添加、编辑或删除字段(报表设计器)
报表数据集(报表设计器)

帮助和信息

获取 SQL Server 2005 帮助