C# MVC 4 を使用して新しく挿入された SQL Server レコードの ID を取得する
問題:
MVC 4 アプリケーションで C# を使用して SQL Server テーブルにデータを挿入し、新しく追加されたレコードの ID を取得するにはどうすればよいですか?
解決策:
SQL Server のバージョンに応じて、主に 2 つのアプローチがあります。
SQL Server 2005 以降:
SQL Server 2005 以降のバージョンで最も効率的な方法は、OUTPUT
句を利用する方法です。
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na, Mem_Occ) OUTPUT INSERTED.ID VALUES (@na, @occ)", con)) { // ... parameter assignments for @na and @occ ... int newId = (int)cmd.ExecuteScalar(); return newId; }</code>
この 1 つの SQL ステートメントはデータを挿入し、新しく生成された ID をすぐに返します。
古い SQL Server バージョン (2005 年より前):
古い SQL Server バージョンの場合は、INSERT
ステートメントとそれに続く SCOPE_IDENTITY()
:
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na, Mem_Occ) VALUES (@na, @occ); SELECT SCOPE_IDENTITY();", con)) { // ... parameter assignments for @na and @occ ... int newId = Convert.ToInt32(cmd.ExecuteScalar()); return newId; }</code>
このアプローチでは、まずデータを挿入し、次に SCOPE_IDENTITY()
を使用して現在のセッションおよびスコープ内で最後に挿入された行の ID を取得します。 SCOPE_IDENTITY()
は現在のセッションとスコープでのみ機能するため、複数の挿入が同時に発生すると、予期しない結果が発生する可能性があることに注意してください。
Mem_Basic
、Mem_Na
、Mem_Occ
を実際のテーブル名と列名に置き換えてください。 また、SQL インジェクションの脆弱性を防ぐために適切なパラメーター化を確保してください。 // ...
セクションは、cmd.Parameters.AddWithValue(...)
を使用してパラメーター割り当てコードを追加する場所を示します。
以上がC# MVC 4 を使用して SQL Server に新しく挿入されたレコードの ID を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。