C# - ストアードプロシージャの OUTPUT パラメーターの値を取得する方法

ストアードプロシージャーの OUTPUT パラメーターの値を取得する

今回は C# から OUTPUT パラメーターのあるストアードプロシージャの実行して、実行後に OUTPUT パラメーターの値を取得する方法です。


OUTPUT パラメーターのあるストアードプロシージャ

例えば、このようなシンプルな Test テーブルがあります。

ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 1

ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 2


そして、この uspTestInsert というストアードプロシージャでは、その Test テーブルにレコードを挿入して、挿入されたレコードの、IDENTITY プロパティのプライマリーキーカラムである TestID の値を、@TestID という名前の OUTPUT パラメターにセットします。

ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 3

SQL Server Management Studio から実行するとこんな感じです。

ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 4


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 を取得することができましたね。

ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 5

ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 6

© 2024 C# 入門