C# MVC 4 での SQL INSERT 後に挿入された ID を取得する
この記事では、MVC 4 アプリケーションで C# を使用してデータを挿入し、新しく挿入されたレコードの ID を取得する方法を説明します。 ExecuteNonQuery
は影響を受ける行の数を示しますが、挿入された ID を取得するには別のアプローチが必要です。
最も簡単な方法は ExecuteScalar
を利用します。 ただし、結果は明示的に整数にキャストする必要があります:
<code class="language-csharp">int modified = (int)cmd.ExecuteScalar();</code>
実行が成功すると、modified
は新しく生成された ID を保持します。
SQL Server 2005 以降の場合、OUTPUT
ステートメント内で INSERT
キーワードを利用すると、より効率的なソリューションが提供されます。
<code class="language-csharp">using (SqlCommand cmd = new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) OUTPUT INSERTED.ID VALUES(@na,@occ)", con)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int modified = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return modified; }</code>
古い SQL Server バージョンの場合、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)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int modified = Convert.ToInt32(cmd.ExecuteScalar()); if (con.State == System.Data.ConnectionState.Open) con.Close(); return modified; }</code>
これらのメソッドにより、SQL Server のバージョンに関係なく、挿入されたレコードの ID を正確に取得できます。 運用環境では、潜在的な例外を適切に処理することを忘れないでください。
以上がC# MVC 4 で SQL INSERT コマンドの後に挿入された ID を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。