ホームページ >データベース >mysql チュートリアル >C# を使用して SQL Server に新しく挿入されたレコードの ID を取得する方法

C# を使用して SQL Server に新しく挿入されたレコードの ID を取得する方法

DDD
DDDオリジナル
2025-01-17 01:31:10350ブラウズ

How to Retrieve the ID of a Newly Inserted Record in SQL Server using C#?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。