C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する

ストアードプロシージャを実行して値を取得する

前回 「C# でストアードプロシージャの結果を SqlDataReader を使って取得する」 では、SqlDataReader を使ってアストアードプロシージャの結果を取得しました。

今回は、SqlDataAdapter を使って、ストアードプロシージャを実行して値を取得してみましょう。


SqlDataAdapter で結果を取得する

SqlDataAdapter を使って、ストアードプロシージャの返す結果セットを DataSet に保存してみましょう。

Test データベースにこのような Student テーブルがあります。

C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 1

次のストアードプロシージャを実行して、Student テーブルから Gender を指定してデータを取得してみましょう。

C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 2


以下のコードで、ストアードプロシージャを実行して、結果を SQL Server データベースからデータを取得することができます。

string connString = ConfigurationManager.ConnectionStrings["DB1"].ConnectionString;

DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand comm = new SqlCommand("uspTest1", conn);
    comm.CommandType = CommandType.StoredProcedure;
    comm.Parameters.AddWithValue("@Gender", "M");

    SqlDataAdapter da = new SqlDataAdapter(comm);
    da.Fill(ds);
}

C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 3

config ファイルから値を取得するのに System.Configuration、DataSet や CommandType を使うのにSystem.Data、SqlConnection や SqlDataAdapter 等を使うのには System.Data.SqlClientが必要ですので、using ディレクティブで追加しておきます。

config ファイルからの接続文字列取得の方法を確認したい場合はこちらをご覧ください。
C# - データベースの接続文字列を App.config から取得する

このコードで行っている処理の流れは次の通りです。

  1. 接続文字列をコンストラクターに渡して SqlConnection を生成する。
  2. ストアドプロシージャ名とコネクションをコンストラクターに渡して SqlCommand を生成する。
  3. CommandType に StoredProcedure を設定する。
  4. AddWithValue で Gender をコマンドのパラメータに追加する。
  5. SqlCommand コンストラクターに渡して、SqlDataAdapter を生成する。
  6. SqlDataAdapter の Fill メソッドで DataSet にストアードプロシージャの実行結果を保存する。

SqlDataAdapter の Fill メソッドは、コネクションが close の状態で呼ばれた時は、コネクションを open してデータを取得し、close してくれるので、SqlDataAdapter の時のように事前に open しなくても大丈夫です。

最後のデータ取得の箇所以外はほぼ SqlDataReader と同じですが、SqlDataReader と SqlDataAdapter の違いが気になる方はこちらご覧ください。
SqlDataReader と SqlDataAdapter の違いと使い分け


実行して、DataSet の中身を確認すると、ストアドプロシージャの実行結果が入っていますね。

C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 4

今回のストアードプロシージャは結果セットをひとつしか返さないので、DataSet の代わりに DataTable を Fill メソッドに渡しても大丈夫です。

© 2024 C# 入門