1

重複の可能性:
最後に挿入された ID を取得するには?

私はテーブルを持っていますAbsences

|  Id  |  Name  |  Job  |
-------------------------
|  1   |  James |   1   |
-------------------------
|  2   |  Simon |   1   |
-------------------------

ここで、ID はPrimary Key1 ずつ増加するID
です。C# のプログラムからこのテーブルにアクセスしており、次の操作を行う必要があります。

Insert Into Absences (Name, Job) Values ('aName', 'aJob')

問題は、 と が一意ではないIdため、同時に挿入する列を取得する必要があるため、後でこの正確な列を取得できないことです。NameJob

Idそのクエリの列に選択を追加することは可能ですか?


アップデート

  SqlConnection myConnection = new SqlConnection(@"SomeConnection");
  myConnection.Open();
  SqlCommand myCommand = myConnection.CreateCommand();
  myCommand.CommandText = "Insert Into Absences (Name, Job) Values ('aName', 'aJob')";
  int currentAbs = (int)myCommand.ExecuteScalar();

ExecuteScalar 行でエラーが発生します。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

4

4 に答える 4

2

SQLステートメントSCOPE_IDENTITY()は、同じスコープ内から新しく挿入された行のID列の値を提供します。

SqlConnection myConnection = new SqlConnection(@"SomeConnection");
myConnection.Open();
SqlCommand myCommand = myConnection.CreateCommand();
myCommand.CommandText = "Insert Into Absences (Name, Job) Values ('aName', 'aJob'); SELECT SCOPE_IDENTITY();";
int currentAbs = (int)myCommand.ExecuteScalar();

スコープIDの定義

于 2012-08-01T12:36:11.587 に答える
1

を使用する場合はSqlCommand、を使用できます

int lastId = (int)command.ExecuteScalar();

挿入されたレコードの一意のIDを取得します。Microsoft
のページをご覧ください。

于 2012-08-01T12:35:58.887 に答える
0

1つの方法はSELECT @@IDENTITY、レコードを挿入した直後に使用することです。

int id;
string query = "Insert Into Absences (Name, Job) Values ('aName', 'aJob')";
using (SqlCommand cmd = new SqlCommand(query, connection)) {
    connection.Open();
    // execute your INSERT query
    cmd.ExecuteNonQuery();
    // get the last-inserted ID
    cmd.CommandText = "SELECT @@IDENTITY";
    id = (int)cmd.ExecuteScalar();
}
于 2012-08-01T12:39:07.587 に答える
0

このクエリの後、 @@identityを選択して、mssql サーバーに最後に挿入された ID を取得できます。

于 2012-08-01T12:38:23.457 に答える