C#でSqlCommandを使用してレコードを挿入し、新しく作成されたIDを返す方法
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