次の方法で共有


レッスン 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 サービスを作成するには (省略可)

  1. Microsoft Visual Studio で、[ファイル] メニューの [新規作成] をクリックし、[Web サイト] をクリックします。

    [新しいWeb サイト] ダイアログ ボックスが表示されます。

    Aa337489.note(ja-jp,SQL.90).gifメモ :
    オプションに [Web サイト] が表示されない場合は、「チュートリアル : レポートでの XML データの使用」で必要条件を確認してください。
  2. [テンプレート] ペインで、[ASP.NET Web Service] を選択します。

  3. [場所] の一覧で、[HTTP] を選択します。

  4. [言語] の一覧で、[Visual Basic] または [C#] を選択します。

  5. [参照] ボタンをクリックします。

    [場所の選択] ダイアログ ボックスが表示されます。

  6. [Web サイトを開く] ペインで、[Local IIS] ボタンが選択されていることを確認します。

  7. Web サイトのツリー コントロールで、この新しい Web サイトの親フォルダに移動します。

  8. [新しい Web アプリケーションの作成] ボタンをクリックします。

  9. Web サイトの名前を入力します。

  10. [開く] をクリックします。

  11. [OK] をクリックします。

    Visual Studio 内に、手順 4. で選択したプログラミング言語の [App_Code/Service] コード ページが開かれ、サンプル WebMethod HelloWorld が表示されます。

    Aa337489.note(ja-jp,SQL.90).gifメモ :
    既定の名前空間は http://tempuri.org/ です。この名前空間は、以下でレポート データセットを定義するときにクエリ内で使用します。この既定値を変更する場合は、クエリを変更する必要があります。
  12. Visual Basic または C# のソース ファイルの先頭に、次の 2 つの名前空間参照を追加します。

    using System.Data;
    using System.Data.SqlClient;
    
    Imports System.Data
    Imports System.Data.SqlClient
    
  13. Web メソッド HelloWorld を、次の 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. [ビルド] メニューの [Web サイトのビルド] をクリックします。

  15. [ビルド] メニューの [Web サイトの発行] をクリックします。

パブリッシュした Web サービスをテストするには (省略可)

  1. Internet Explorer を開きます。

  2. [アドレス] バーに、Web サービスの URL を入力します。

    たとえば、「https://localhost/XMLTutorial/Service.asmx」と入力します。

    Web サービスの既定のページが表示されます。

  3. [GetEmployeeManagersFromAdventureWorks] をクリックします。

  4. EmployeeID の値として、1 ~ 290 の範囲の値を入力します。

  5. [呼び出し] をクリックします。

    Web サービスによってストアド プロシージャ uspGetEmployeeManagers が呼び出され、AdventureWorks データベースから従業員 - 管理者のデータセットが取得されます。

Aa337489.note(ja-jp,SQL.90).gifメモ :
"オブジェクトに対する実行のアクセス許可が拒否されました" というメッセージが表示された場合は、以下の手順に従い、ASPNETUser に対して AdventureWorks ストアド プロシージャの実行権限を与える必要があります。

ストアド プロシージャの実行権限を与えるには (省略可)

  1. Microsoft SQL Server Management Studio を開きます。

  2. サンプル データベース AdventureWorks がインストールされているデータベース エンジンに接続します。

  3. オブジェクト エクスプローラで、[データベース] ノード、[AdventureWorks] ノード、[プログラミング]ノード、[ストアド プロシージャ] ノードの順に展開します。

  4. dbo.uspGetEmployeeManagers を右クリックし、[プロパティ] をクリックします。

  5. [ページの選択] ペインで [権限] をクリックします。

  6. [ユーザーまたはロール] ペインで [追加] をクリックします。

  7. [参照] ボタンをクリックし、[ASPNETUser] を選択します。

  8. [OK] をクリックします。

    これで、ASP.NET を実行する任意のユーザーに対し、uspGetEmployeeManagers ストアド プロシージャの実行権限を追加できました。

Web サービスのレポート データセットを定義するには

  1. レポート デザイナを起動し、このチュートリアル用に作成したレポート サーバー プロジェクトを開きます。

  2. [データ] ビューで、[新しいデータセット] を選択し、データセットの名前を入力します (たとえば「XMLWebDataSet」)。

  3. [データセット] ダイアログ ボックスの [データ ソース] で、[新しいデータ ソース] をクリックします。[データ ソース] ダイアログ ボックスが表示されます。

  4. データ ソースの名前を入力します (たとえば「XMLWebDataSource」)。

  5. [型] で、[XML] をクリックします。

  6. [接続文字列] で、レポート サーバー Web サービスを指す次の URL を入力します。

    https://localhost/XMLTutorial/Service.asmx

  7. [資格情報] タブで、[Windows 認証 (統合セキュリティ) を使用する] をクリックします。

  8. [OK] をクリックして、変更を保存し、[データ ソース] ダイアログ ボックスを閉じます。

  9. [レポート] メニューの [レポート パラメータ] をクリックします。[レポート パラメータ] ダイアログ ボックスが表示されます。

  10. [追加] をクリックします。

  11. [プロパティ] セクションの [名前] ボックスに、「EmployeeID」と入力します。

  12. [表示名] ボックスに「Employee ID」と入力します。

  13. [OK] をクリックします。

  14. [データ] タブで、ツール バーの [選択したデータセットの編集] ([…]) ボタンをクリックします。[データセット] ダイアログ ボックスが表示されます。

  15. [パラメータ] タブをクリックします。

  16. [名前] 列に「EmployeeID」と入力します。

  17. [値] ボックス内をクリックして一覧を選択できるようにし、[=Parameters!EmployeeID.Value] を選択します。これで、データセット パラメータがレポート パラメータにマップされます。

  18. [OK] をクリックします。

  19. [データセット] ダイアログ ボックスで、手順 1. で確認した名前空間のバージョン情報を使用して、次のクエリを入力します。

    <Query>
        <SoapAction>
            http://tempuri.org/GetEmployeeManagers
        </SoapAction>
        <Method Namespace="http://tempuri.org/" 
            Name="GetEmployeeManagers">
        </Method>
    </Query>
    
  20. ツール バーの [実行] ([!]) ボタンをクリックします。[クエリ パラメータの定義] ダイアログ ボックスが表示されます。

  21. [パラメータ値] 列に、1 ~ 290 の範囲の EmployeeID 番号を入力します。

  22. [OK] をクリックします。データセットが [データセット] ウィンドウに追加されます。

  23. 結果セットを確認します。クエリを実行すると、既定ではすべての XML 要素および属性から、データセット内で見つかった最初の XML パス上にあるリーフ ノードまでのデータが抽出されます。

  24. クエリ ペインで、<Query> タグの直後に次の ElementPath を貼り付けます。

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

    これによってクエリに要素パスが指定され、結果セットにデータを取得する際、どの要素を使用するかが決まります。この場合、GetEmployeeManagersResponse、GetEmployeeManagersResult、diffgram、および Results ノードの後に空のかっこ ({}) が付いているので、クエリではこれらのデータがすべてスキップされます。Table ノードにはかっこが付いていないので、クエリではそのすべてのノードと属性が取得されます。

    Aa337489.note(ja-jp,SQL.90).gifメモ :
    データセットのフィールド コレクションに取得する Table 要素を指定するには、Table {FirstName, LastName, EmployeeID, ManagerID, RecursionLevel} のように Table 要素の後の中かっこ内に要素を列記します。
  25. [実行] ([!]) をクリックして、結果セットを表示します。ElementPath 要素に加えた変更によって、クエリで返される結果セットが変わります。

  26. 結果セットに問題がなければ、ツール バーの [フィールドの更新] (データセット フィールドの更新) ボタンをクリックします。レポート定義が保存され、[データセットのレポート] ウィンドウのフィールドの表示が更新されて、使用するすべてのフィールドが表示されます。

次の手順

ここでは、Web サービスによって返される XML の System.Data.DataSet object から取得するレポート データセットを定義し、レポートを実行したときにそれぞれの XML テーブル要素とその属性が Web サービスから取得されるようにしました。次は、レポートに埋め込まれた XML から レポート データセットを作成します。「レッスン 3 : 埋め込み XML データからのレポート データセットの定義」を参照してください。

参照

概念

Reporting Services のチュートリアル

その他の技術情報

レポート データセットの定義 (XML データ)
データ ソースへの接続
レポートのデータセットの定義
レポート固有のデータ ソースを作成または編集する方法 (レポート デザイナ)
データセットを作成する方法 (レポート デザイナ)
レポート データセットのフィールドの操作
[データセット] ウィンドウでフィールドを追加、編集、削除する方法 (レポート デザイナ)
[データセットのレポート] (レポート デザイナ)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手