C# - ストアードプロシージャの OUTPUT パラメーターの値を取得する方法
ストアードプロシージャーの OUTPUT パラメーターの値を取得する
今回は C# から OUTPUT パラメーターのあるストアードプロシージャの実行して、実行後に OUTPUT パラメーターの値を取得する方法です。
OUTPUT パラメーターのあるストアードプロシージャ
例えば、このようなシンプルな Test テーブルがあります。
そして、この uspTestInsert というストアードプロシージャでは、その Test テーブルにレコードを挿入して、挿入されたレコードの、IDENTITY プロパティのプライマリーキーカラムである TestID の値を、@TestID という名前の OUTPUT パラメターにセットします。
SQL Server Management Studio から実行するとこんな感じです。
C# から OUTPUT パラメーターの値を取得する
C# から uspTestInsertを実行して、 OUTPUT パラメーターである @TestID の値を次のように取得することができます。
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand("uspTestInsert", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@TestNameEn", "English 2"); cmd.Parameters.AddWithValue("@TestNameJp", "英語2"); cmd.Parameters.Add("@TestID", SqlDbType.Int); cmd.Parameters["@TestID"].Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); int? testID = null; if (cmd.Parameters["@TestID"].Value != DBNull.Value) { testID = Convert.ToInt32(cmd.Parameters["@TestID"].Value); } }
OUTPUT パラメーターは AddWithValue ではなく Add で追加して、Parameter の Direction を Output に設定しています。
ストアードプロシージャ実行後に、その SqlParameter.Value で値を取得できます。
実行してみると、Test テーブルにレコードが挿入され、そのレコードの TestID = 5 を取得することができましたね。