ホームページ > バックエンド開発 > C++ > C# で SQL Server ストアド プロシージャから出力パラメータを正常に取得するにはどうすればよいですか?

C# で SQL Server ストアド プロシージャから出力パラメータを正常に取得するにはどうすればよいですか?

DDD
リリース: 2025-01-10 09:09:40
オリジナル
323 人が閲覧しました

How Can I Successfully Retrieve Output Parameters from a SQL Server Stored Procedure in C#?

C# でのストアド プロシージャ出力パラメーターの使用

質問

SQL Server ストアド プロシージャから出力パラメーターを C# 変数に返すのは難しい場合があります。さまざまな推奨事項に従っているにもかかわらず、多くの開発者は依然として null 値やその他の問題を報告しています。

ストアド プロシージャ

次のストアド プロシージャ usp_InsertContract について考えます。このストアド プロシージャは、契約番号をデータベースに挿入し、主キーを出力パラメータとして返すように設計されています。

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber);
    Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber;
END</code>
ログイン後にコピー

データベースを開く

次のコードを使用してデータベース接続を開きます:

<code class="language-csharp">pvConnectionString = "Server = Desktop-PC\SQLEXPRESS; Database = PVDatabase; User ID = sa;
    PASSWORD = *******; Trusted_Connection = True;";

try
{
    pvConnection = new SqlConnection(pvConnectionString);
    pvConnection.Open();
}
catch (Exception e)
{
    databaseError = true;
}</code>
ログイン後にコピー

コマンドを実行

次のコードを使用してストアド プロシージャを実行します:

<code class="language-csharp">pvCommand = new SqlCommand("usp_InsertContract", pvConnection);

pvCommand.Transaction = pvTransaction;
pvCommand.CommandType = CommandType.StoredProcedure;

pvCommand.Parameters.Clear();
pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));

SqlParameter pvNewId = new SqlParameter();
pvNewId.ParameterName = "@NewId";
pvNewId.DbType = DbType.Int32;
pvNewId.Direction = ParameterDirection.Output;
pvCommand.Parameters.Add(pvNewId);

try
{
    sqlRows = pvCommand.ExecuteNonQuery();

    if (sqlRows > 0)
        Debug.Print("New Id Inserted =  ", 
            pvCommand.Parameters["@NewId"].Value.ToString()); 
}
catch (Exception e)
{
    Debug.Print("Insert Exception Type: {0}", e.GetType());
    Debug.Print("  Message: {0}", e.Message);
}</code>
ログイン後にコピー

解決策

を使用して主キーを取得し、ストアド プロシージャにいくつかの変更を加えて null 値の問題を解決します。 SCOPE_IDENTITY()

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber);
    SELECT @NewId = SCOPE_IDENTITY();
END</code>
ログイン後にコピー
この変更されたストアド プロシージャを C# で使用するには、次のコードを実装します:

<code class="language-csharp">using(SqlConnection conn = new SqlConnection(pvConnectionString))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7).Value = contractNumber;
    cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;
    conn.Open();
    cmd.ExecuteNonQuery();
    int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
    conn.Close();
}</code>
ログイン後にコピー
このコードは、ストアド プロシージャから返された主キーを正常に取得して出力します。

以上がC# で SQL Server ストアド プロシージャから出力パラメータを正常に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート