C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する
ストアードプロシージャを実行して値を取得する
前回 「C# でストアードプロシージャの結果を SqlDataReader を使って取得する」 では、SqlDataReader を使ってアストアードプロシージャの結果を取得しました。
今回は、SqlDataAdapter を使って、ストアードプロシージャを実行して値を取得してみましょう。
SqlDataAdapter で結果を取得する
SqlDataAdapter を使って、ストアードプロシージャの返す結果セットを DataSet に保存してみましょう。
Test データベースにこのような Student テーブルがあります。
次のストアードプロシージャを実行して、Student テーブルから Gender を指定してデータを取得してみましょう。
以下のコードで、ストアードプロシージャを実行して、結果を 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); }
config ファイルから値を取得するのに System.Configuration、DataSet や CommandType を使うのにSystem.Data、SqlConnection や SqlDataAdapter 等を使うのには System.Data.SqlClientが必要ですので、using ディレクティブで追加しておきます。
C# - データベースの接続文字列を App.config から取得する
このコードで行っている処理の流れは次の通りです。
- 接続文字列をコンストラクターに渡して SqlConnection を生成する。
- ストアドプロシージャ名とコネクションをコンストラクターに渡して SqlCommand を生成する。
- CommandType に StoredProcedure を設定する。
- AddWithValue で Gender をコマンドのパラメータに追加する。
- SqlCommand コンストラクターに渡して、SqlDataAdapter を生成する。
- SqlDataAdapter の Fill メソッドで DataSet にストアードプロシージャの実行結果を保存する。
SqlDataAdapter の Fill メソッドは、コネクションが close の状態で呼ばれた時は、コネクションを open してデータを取得し、close してくれるので、SqlDataAdapter の時のように事前に open しなくても大丈夫です。
最後のデータ取得の箇所以外はほぼ SqlDataReader と同じですが、SqlDataReader と SqlDataAdapter の違いが気になる方はこちらご覧ください。
SqlDataReader と SqlDataAdapter の違いと使い分け
実行して、DataSet の中身を確認すると、ストアドプロシージャの実行結果が入っていますね。
今回のストアードプロシージャは結果セットをひとつしか返さないので、DataSet の代わりに DataTable を Fill メソッドに渡しても大丈夫です。