C# で SQL Server ストアド プロシージャから出力パラメータ値、特に SCOPE_IDENTITY()
を使用して主キーを正常に取得するのは難しい場合があります。 この記事では、一般的な問題に対処し、実用的な解決策を提供します。
usp_InsertContract
ストアド プロシージャはプロセスを示します。 Contracts
テーブルにレコードを挿入し、Id
出力パラメーターを介して新しく生成された主キー (@NewId
列) を返します。 更新されたプロシージャでは、主キーを正確に取得するために 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">SqlParameter pvNewId = new SqlParameter(); pvNewId.ParameterName = "@NewId"; pvNewId.DbType = DbType.Int32; pvNewId.Direction = ParameterDirection.Output; // ... (Add pvNewId to the SqlCommand object 'cmd') ... // Execute the stored procedure cmd.ExecuteNonQuery(); // Retrieve the output value int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);</code>
問題が発生した場合は、次の点を確認してください:
Contracts
テーブルに ID 列 (自動インクリメント主キー) が含まれていることを確認します。SCOPE_IDENTITY()
を正しく使用してください。SqlParameter
オブジェクト (pvNewId
) が SqlCommand
オブジェクト (cmd
) に正しく追加されていること、およびそのプロパティ (ParameterName
、DbType
、Direction
) が正確に設定されています。これらの点に対処することで、C# アプリケーション内の SQL Server ストアド プロシージャから、SCOPE_IDENTITY()
によって生成されたものを含む出力パラメーターを効果的に取得できます。
以上がC# で SQL Server ストアド プロシージャから SCOPE_IDENTITY() を含む出力パラメータを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。