第 2 課:從 Web 服務定義 ADO.NET 資料集的報表資料集
新增: 2006 年 7 月 17 日
在這一課,您將建立資料來源連接到傳回 XML System.Data.DataSet 物件的 Web 服務。您可以建立及部署傳回 XML System.Data.DataSet 物件的 Web 服務,或使用您可用的現有 Web 服務。您將定義查詢字串,指定您要從由 Web 服務傳回的 XML System.Data.DataSet 為報表資料集擷取的資料。
在本教學課程中,Web 服務呼叫 AdventureWorks 範例資料庫中的預存程序 uspGetEmployeeManagers,擷取員工和管理員資訊。這個預存程序接受 EmployeeID 值,並產生結果集,遞迴顯示員工-管理員關係一直到最上層員工。
程序
建立傳回 ADO.NET 資料集的 Web 服務 (選擇性)
在 Microsoft Visual Studio 中,從 [檔案] 功能表中,按一下 [新增],然後按一下 [網站]。
[新網站] 對話方塊隨即開啟。
附註:
如果看不到 [網站] 選項,請檢查 教學課程:在報表中使用 XML 資料 的需求區段。 在 [範本] 窗格中,選取 [ASP.NET Web 服務]。
在 [位置] 下拉式清單上,選取 [HTTP]。
在 [語言] 下拉式清單中,選取 [Visual Basic] 或 [C#]。
按一下 [瀏覽] 按鈕。
[選擇位置] 對話方塊隨即開啟。
在 [開啟網站] 網站窗格中,確認已選取 [本機 IIS] 按鈕。
在網站樹狀目錄控制項上,導覽到此新網站的父資料夾。
按一下 [建立新 Web 應用程式] 按鈕。
輸入您的網站名稱。
按一下 [開啟]。
按一下 [確定]。
您在步驟 4 選取的程式設計語言之 App_Code/Service 字碼頁在 Visual Studio 中開啟,顯示範例 WebMethod HelloWorld。
附註:
預設命名空間為 http://tempuri.org/
。在下面定義報表資料集時,此命名空間將用在查詢中。如果您變更此預設值,將必須變更查詢。加入下列兩個命名空間參考至 Visual Basic 或 C# 來源檔案的頂端。
using System.Data; using System.Data.SqlClient;
Imports System.Data Imports System.Data.SqlClient
以下列 Visual Basic 或 C# 程式碼,取代 HelloWorld WebMethod。
[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
在 [建立] 功能表中,按一下 [建立網站]。
在 [建立] 功能表中,按一下 [發行網站]。
測試已發行的 Web 服務 (選擇性)
開啟 Internet Explorer。
在 [位址] 列中,輸入您的 Web 服務 URL。
例如,https://localhost/XMLTutorial/Service.asmx。
隨即出現 Web 服務預設頁面。
按一下 [GetEmployeeManagersFromAdventureWorks]。
輸入介於 1 與 290 之間的 EmployeeID 值。
按一下 [叫用]。
Web 服務使用預存程序 uspGetEmployeeManagers,從 AdventureWorks 資料庫擷取含有員工管理員的資料集。
![]() |
---|
如果接到「物件上拒絕 EXECUTE 權限」訊息,必須遵照下列程序中的描述,授與 ASPNETUser 在 AdventureWorks 上預存程序的 EXECUTE 權限。 |
授與預存程序的 EXECUTE 權限 (選擇性)
開啟 [Microsoft SQL Server Management Studio]。
連接到安裝 AdventureWorks 範例資料庫的 Database Engine。
在 [物件總管] 中,依序展開 [資料庫] 節點、[AdventureWorks] 節點、[可程式性] 節點和 [預存程序] 節點。
以滑鼠右鍵按一下 dbo.uspGetEmployeeManagers,然後選擇 [屬性]。
在 [選取頁面] 窗格中,按一下 [權限]。
對於 [使用者或角色] 窗格,按一下 [加入] 按鈕。
按一下 [瀏覽] 按鈕。選取 [ASPNETUser]。
按一下 [確定]。
您已為執行 ASP.NET 的任何人加入權限,以執行 uspGetEmployeeManagers 預存程序。
定義 Web 服務的報表資料集
啟動報表設計師,然後開啟為此教學課程建立的報表伺服器專案。
在 [資料] 檢視中,選取 [新增資料集]。輸入資料集的名稱 (例如 XMLWebDataSet)。
在 [資料集] 對話方塊的 [資料來源] 中,選取 [新增資料來源]。此時會出現 [資料來源] 對話方塊。
輸入資料來源的名稱 (例如 XMLWebDataSource)。
在 [類型] 中,選取 [XML]。
在 [連接字串] 中,輸入下列報表伺服器 Web 服務的 URL:
https://localhost/XMLTutorial/Service.asmx
在 [認證] 索引標籤中,選取 [使用 Windows 驗證 (整合式安全性)]。
按一下 [確定] 以儲存您的變更,並關閉 [資料來源] 對話方塊。
在 [報表] 功能表上,按一下 [報表參數]。[報表參數] 對話方塊隨即開啟。
按一下 [加入]。
在 [屬性] 區段的 [名稱] 文字方塊中,輸入 EmployeeID。
在 [提示] 文字方塊中,輸入 Employee ID。
按一下 [確定]。
在 [資料] 索引標籤上,按一下工具列的 [編輯選取的資料集] (…) 按鈕。[資料集] 對話方塊隨即開啟。
按一下 [參數] 索引標籤。
在 [名稱] 資料行中,輸入 EmployeeID。
在 [值] 文字方塊中按一下,啟用下拉式清單,然後選取 =Parameters!EmployeeID.Value。如此即可對應資料集參數至報表參數。
按一下 [確定]。
在 [資料集] 對話方塊中,利用您在步驟 1 驗證的命名空間版本資訊來輸入下列查詢:
<Query> <SoapAction> http://tempuri.org/GetEmployeeManagers </SoapAction> <Method Namespace="http://tempuri.org/" Name="GetEmployeeManagers"> </Method> </Query>
按一下工具列上的 [執行 (!)] 按鈕。[定義查詢參數] 對話方塊隨即開啟。
在 [參數值] 資料行中,輸入介於 1 與 290 之間的 EmployeeID 編碼。
按一下 [確定]。資料集會加入 [資料集] 視窗中。
檢查結果集。依預設,查詢會從所有 XML 元素和屬性擷取資料,一直到它在資料集中所找到第一個 XML 路徑上的分葉節點。
將下列 ElementPath 貼入 [查詢] 窗格中,就在 <Query> 標記之後。
<ElementPath IgnoreNamespaces="True"> GetEmployeeManagersResponse {}/ GetEmployeeManagersResult/diffgram{}/ Results {}/Table </ElementPath>
如此可提供含有指定用來從結果集擷取資料的元素之元素路徑的查詢。在本範例中,GetEmployeeManagersResponse、GetEmployeeManagersResult、diffgram 和 Results 等節點之後的空白大括號 ({}),都指示查詢略過這些節點的資料。沒有大括號的 Table 節點指示查詢擷取該節點的所有節點和屬性。
附註:
若要指定為資料集欄位集合擷取的 Table 元素,請將欄位列於大括號之內的 Table 元素之後,如下列範例所示: Table {FirstName, LastName, EmployeeID, ManagerID, RecursionLevel}
。按一下 [執行 (!)],以檢視結果集。在 ElementPath 元素中所作的變更改變了由查詢傳回的結果集。
當您對結果集感到满意時,按一下工具列上的 [重新整理欄位] (
) 按鈕。這時就會儲存報表定義,並且更新 [報表資料集] 視窗中的欄位檢視,以顯示您可使用的所有欄位。
後續的步驟
您已順利從由 Web 服務傳回的 XML System.Data.DataSet object 定義報表資料集。處理報表時,各個 XML 資料表元素及其屬性的資料都是從 Web 服務擷取的。下一步,您要從內嵌於報表中的 XML 建立報表資料集。請參閱<第 3 課:從內嵌 XML 資料定義報表資料集>。
請參閱
概念
其他資源
定義 XML 資料的報表資料集
連接到資料來源
定義報表資料集
如何:建立或編輯報表特定資料來源 (報表設計師)
如何:建立資料集 (報表設計師)
使用報表資料集中的欄位
如何:加入、編輯或刪除資料集視窗中的欄位 (報表設計師)
報表資料集 (報表設計師)