ホームページ >データベース >mysql チュートリアル >C# を使用して SQL Server に新しく挿入されたレコードの ID を取得する方法
C# を使用して SQL Server に新しく挿入されたレコード ID を取得する
このガイドでは、MVC 4 アプリケーション内で C# を使用して、SQL Server データベースに新しく挿入されたレコードの一意の識別子 (ID) を効率的に取得する方法を説明します。 これを実現するには、元のコードを変更する必要があります。
元のコード (非効率):
<code class="language-csharp">public class MemberBasicData { public int Id { get; set; } public string Mem_NA { get; set; } public string Mem_Occ { get; set; } } public int CreateNewMember(string Mem_NA, string Mem_Occ ) { using (SqlConnection con=new SqlConnection(Config.ConnectionString)) { using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ)",con)) { cmd.Parameters.AddWithValue("@na", Mem_NA); cmd.Parameters.AddWithValue("@occ", Mem_Occ); con.Open(); int modified = cmd.ExecuteNonQuery(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return modified; } } }</code>
改善されたコード (ID 取得あり):
次の例は、新しく生成された ID を取得する方法を示しています。 SQL Server のバージョンに適した方法を選択してください:
SQL Server 2005 以降 (推奨):
このメソッドは、最適なパフォーマンスを得るために OUTPUT INSERTED.ID
句を使用します。
<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 newId = (int)cmd.ExecuteScalar(); if (con.State == System.Data.ConnectionState.Open) con.Close(); return newId; }</code>
古い SQL Server バージョン (2005 年より前):
このアプローチでは 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 newId = Convert.ToInt32(cmd.ExecuteScalar()); if (con.State == System.Data.ConnectionState.Open) con.Close(); return newId; }</code>
両方の改訂されたメソッドは、生成された ID を直接取得するために ExecuteScalar
を使用します。 SCOPE_IDENTITY()
メソッドは、古い SQL Server バージョンに制限されている場合にのみ使用してください。 SQL Server 2005 以降では、OUTPUT INSERTED.ID
メソッドの方が大幅に効率的であるため推奨されます。
重要: Mem_Basic
テーブルの ID 列がデータベース スキーマの IDENTITY
列として定義されていることを確認してください。
以上がC# を使用して SQL Server に新しく挿入されたレコードの ID を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。