Visual Basic .NET を使用して複数の結果セットを返すストアド プロシージャの型指定されたデータセットに格納するには、方法


この資料は、次の Microsoft.NET Framework クラス ライブラリの名前空間を参照します。

  • System.Data
  • System.Data.SqlClient

概要


ステップ バイ ステップの資料では、汎用的なデータ テーブルオブジェクトの名前を型指定されたDataSetオブジェクトで既に定義されているスキーマにマップするデータ アダプターの TableMappingsコレクションを使用する方法を示します。

複数の結果セットを返すストアド プロシージャからデータセットに格納するデータ アダプターオブジェクトを使用する場合、データ アダプターはという名前のテーブル、Table1、Table2、データセットDataTableオブジェクトを作成します。わかりやすい名前を使用するには、 DataTableオブジェクトの名前を変更することができます。ただし、型指定されたデータセットでこのソリューションを使うことはできません。

ストアド プロシージャを作成します。

この例ではストアド プロシージャは、Microsoft SQL Server のノースウィンドサンプル データベースからデータを使用します。ストアド プロシージャは、 [得意先] テーブルからすべてのレコードを選択し、[受注]テーブルからすべてのレコードを選択します。

  1. Microsoft Visual Studio .NET を起動します。
  2. [表示] メニューには、サーバー エクスプ ローラーをクリックします。
  3. サーバー エクスプ ローラーで、SQL Server のNorthwindデータベースへの接続します。
  4. ツリー ビューで、データベース接続、[ストアド プロシージャのノードを右クリックし、ストアド プロシージャの新規作成] をクリックします。
  5. ストアド プロシージャに次のコードを追加します。
    CREATE PROCEDURE dbo.sp_GetCustOrd
    AS
    SELECT * FROM Customers;
    SELECT * FROM Orders;
  6. ファイル] メニューの [ストアド プロシージャを保存する保存をクリックします。

型指定されたデータセットを作成します。

プロジェクトに新しいDataSetオブジェクトを追加することで、型指定されたデータセットスキーマを手動で作成することができますが ([プロジェクト] メニューの [新しい項目の追加] をクリックし、[データセット] をクリックして) この例では、サーバー エクスプ ローラーを使用して、ビルド、データセットのスキーマに自動的にします。

  1. Visual Studio .NET では、[ファイル] メニューの新規作成] をポイントし、[プロジェクト] をクリックします。
  2. [プロジェクトの種類Visual Basic プロジェクト] をクリックし、[テンプレート] で [ Windows アプリケーション] をクリックします。
  3. [表示] メニューには、サーバー エクスプ ローラーをクリックします。
  4. サーバー エクスプ ローラーで、データベースへの接続] をクリックし、SQL Server のNorthwindデータベースに接続します。
  5. サーバー エクスプ ローラーから現在のプロジェクトに、顧客注文テーブルをドラッグします。SqlConnectionオブジェクトと 2 つのいきますオブジェクトをプロジェクトに追加することを確認します。
  6. [プロパティ] ウィンドウで [データセットの生成] をクリックし、両方のテーブルをデータセットに追加します。.Xsd ファイルがプロジェクトに追加されることを確認します。.Xsd ファイルは、データセットクラスの選択した名前に従って付けられています。

DataRelation を追加します。

  1. ソリューション エクスプ ローラーで、前のセクションで作成した .xsd ファイルをダブルクリックします。
  2. デザイナーで [得意先] テーブルを右クリックし、追加] をポイントし、[新しいリレーションシップ] をクリックします。
  3. [リレーションシップの編集] ダイアログ ボックスで、子要素として、[受注] テーブルを選択し、[ OK] をクリックします。CustomersOrdersを名前付きデータセットスキーマに新しいDataRelationが作成されます。
  4. ファイル] メニューの [変更を保存保存をクリックします。

型指定されたデータセットします。

このセクションでは、型指定されたデータセットへのデータとテーブル名をマップするコードを追加します。このセクションでは、塗りつぶされたデータセットを表示するのにDataGridコントロールを使用します。

  1. DataGridコントロールをツールボックスからフォームにドラッグします。
  2. フォームをダブルクリックし、フォームのLoadイベントに次のコードを追加します。
    Dim da As New SqlDataAdapter("sp_GetCustOrd", SqlConnection1)
    da.SelectCommand.CommandType = CommandType.StoredProcedure
    da.TableMappings.Add("Table", "Customers")
    da.TableMappings.Add("Table1", "Orders")
    Dim ds As New CustOrd() ' Change this name to match .xsd file name.
    da.Fill(ds)
    DataGrid1.DataSource = ds
    DataGrid1.DataMember = "Customers"
    :"CustOrd"を変更する必要があります、型指定されたデータセットの作成] セクションで作成した .xsd ファイルの名前と一致します。
  3. コード ウィンドウの上部に次の名前空間参照を追加します。
    Imports System.Data.SqlClient
  4. ファイル] メニューの [変更を保存保存をクリックします。
  5. F5 キーを押してアプリケーションを実行します。

トラブルシューティング

  • Microsoft Jet データベースを使用する場合は、複数ステートメントのストアド プロシージャを持つことはできません。
  • ストアド プロシージャの構文は、Microsoft SQL Server 以外のリレーショナル データベース システムと異なる場合があります。
  • SqlClient .NET データ プロバイダーは、Microsoft SQL Server 7.0 およびそれ以降でのみ動作します。その他のリレーショナル データベース システムの場合は、ole Db .NET データ プロバイダーまたはその他の適切なプロバイダーを使用してし、適切な接続情報が含まれます。
  • 通常、システムおよびSystem.Data名前空間は、Visual Basic プロジェクトのプロジェクト レベルでインポートされます。コマンド プロンプトからコンパイルする場合、またはプロジェクトの設定を変更した場合は、コード ウィンドウの上部にあるこれらの名前空間のImportsステートメントを明示的に追加する必要があります。