C#でSqlCommandを使用してレコードを挿入し、新しく作成されたIDを返す方法

2024-04-08

C#でSqlCommandを使用してレコードを挿入し、新しく作成されたIDを返す方法

SqlConnection オブジェクトを作成する

まず、データベースへの接続を表す SqlConnection オブジェクトを作成します。

using (var connection = new SqlConnection("connection string"))
{
  // ...
}

次に、SqlCommand オブジェクトを作成し、挿入するレコードの情報と、新しく作成されたIDを取得するためのクエリを指定します。

var command = new SqlCommand("INSERT INTO table (column1, column2) VALUES (@value1, @value2); SELECT SCOPE_IDENTITY();", connection);

command.Parameters.AddWithValue("@value1", value1);
command.Parameters.AddWithValue("@value2", value2);

SqlCommand オブジェクトを実行すると、レコードが挿入され、新しく作成されたIDが返されます。

connection.Open();

var id = (int)command.ExecuteScalar();

connection.Close();

以下は、Customers テーブルにレコードを挿入し、新しく作成されたIDを取得する例です。

using (var connection = new SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=True"))
{
  var command = new SqlCommand("INSERT INTO Customers (FirstName, LastName) VALUES (@firstName, @lastName); SELECT SCOPE_IDENTITY();", connection);

  command.Parameters.AddWithValue("@firstName", "John");
  command.Parameters.AddWithValue("@lastName", "Doe");

  connection.Open();

  var id = (int)command.ExecuteScalar();

  connection.Close();

  Console.WriteLine("The newly created ID is: {0}", id);
}

その他

  • 新しく作成されたIDを取得するには、SCOPE_IDENTITY() 関数を使用します。
  • SCOPE_IDENTITY() 関数は、@@IDENTITY 変数の値を返します。
  • @@IDENTITY 変数は、最後に挿入されたレコードのIDを格納します。
  • IDENTITY プロパティを使用して、自動的に生成されるID列を指定することもできます。



using (var connection = new SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=True"))
{
  var command = new SqlCommand("INSERT INTO Customers (FirstName, LastName) VALUES (@firstName, @lastName); SELECT SCOPE_IDENTITY();", connection);

  command.Parameters.AddWithValue("@firstName", "John");
  command.Parameters.AddWithValue("@lastName", "Doe");

  connection.Open();

  var id = (int)command.ExecuteScalar();

  connection.Close();

  Console.WriteLine("The newly created ID is: {0}", id);
}

このコードは、Customers テーブルに "John Doe" という名前の新しい顧客を挿入し、新しく作成されたIDを出力します。

コードの説明

  • using ステートメントを使用して、SqlConnection オブジェクトを確実に破棄しています。
  • SqlCommand オブジェクトのコンストラクタに、挿入クエリと接続文字列を渡しています。
  • AddWithValue メソッドを使用して、クエリのパラメータに値を設定しています。
  • Open メソッドを使用して、データベースへの接続を開きます。
  • ExecuteScalar メソッドを使用して、クエリを実行し、最初の結果を返します。
  • Console.WriteLine メソッドを使用して、新しく作成されたIDを出力します。



新しく作成されたIDを取得する他の方法

  • OUTPUT 句を使用する
  • IDENTITY プロパティを使用する

OUTPUT 句を使用して、挿入されたレコードの列の値を取得できます。

INSERT INTO Customers (FirstName, LastName)
OUTPUT INSERTED.CustomerID
VALUES (@firstName, @lastName);
var command = new SqlCommand("INSERT INTO Customers (FirstName, LastName) VALUES (@firstName, @lastName);", connection);

command.Parameters.AddWithValue("@firstName", "John");
command.Parameters.AddWithValue("@lastName", "Doe");

command.CommandText += " SET @id = @@IDENTITY;";

var id = (int)command.ExecuteScalar();

Console.WriteLine("The newly created ID is: {0}", id);

c# sql sql-server


Python、Ruby、JavaScriptでできる!CSVファイルからINSERT SQLステートメントを生成する方法

CSVファイルからINSERT SQLステートメントを生成するには、次の手順が必要です。CSVファイルの構造を理解する CSVファイルには、ヘッダー行があるかどうかを確認します。 各列のデータ型を確認します。CSVファイルの構造を理解する...


Entity Framework で効率的に行数をカウント:Count() メソッドとその他の方法

例:Count() メソッドを使用した行数のカウントこのコードは、Products テーブル内の行数をカウントし、その結果をコンソールに表示します。Count() メソッドの利点行の内容を読み込まないため、パフォーマンスが向上します。複雑なクエリで使用できます。...


ALTER TABLEステートメントを使用して新しい列にデフォルト値を追加する方法

既存のテーブルに新しい列を追加することは、多くのデータベース管理システム(DBMS)で頻繁に行われる操作です。多くの場合、新しい列にはデフォルト値を設定することが望ましいです。デフォルト値は、新しい行が挿入される際に、明示的に値が指定されない場合に自動的に割り当てられます。...


SQL Serverデータベース内のすべてのユーザーの権限/アクセス権を確認する方法

このページでは、SQL Serverデータベース内のすべてのユーザーの権限とアクセス権を確認するためのクエリについて解説します。対象読者SQL Serverデータベースの管理者データベースのセキュリティを強化したい方前提条件SQL Server Management Studio (SSMS) がインストールされていること...


【保存データ別】MySQLで適切なデータ型を選択する方法とサンプルコード

以下は、MySQLで利用可能な主要なデータ型とその概要です。数値型:TINYINT: 小さな整数を格納します。(-128~127)SMALLINT: 中程度の整数を格納します。(-32, 768~32, 767)MEDIUMINT: 大きな整数を格納します。(-8,388...


SQL SQL SQL Amazon で見る



SQL Server にデータを挿入して ID を取得する:C# による 3 つのベストプラクティス

SCOPE_IDENTITY() 関数を使用するこの方法は、最もシンプルで汎用性の高い方法です。以下のコード例のように、INSERT ステートメントを実行した後、SCOPE_IDENTITY() 関数を使用して、挿入された ID を取得します。