1

可能重复:
如何获取最后插入的 id?

我有一张桌子Absences

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

其中 ID 是Primary Key递增 1的标识。
我正在从 C# 中的程序访问此表,我需要执行以下操作:

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

问题是我需要同时获取Id我要插入的列,因为Name并且Job不是唯一的,所以我将无法在之后检索这个确切的列。

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 Line 上遇到错误。对象引用未设置为对象的实例。

4

4 回答 4

2

SQL 语句SCOPE_IDENTITY()将为您提供同一范围内新插入行的标识列的值。

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();

范围身份定义

于 2012-08-01T12:36:11.587 回答
1

如果你使用SqlCommand,那么你可以使用

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

检索插入记录的唯一 ID。
看看微软页面

于 2012-08-01T12:35:58.887 回答
0

在此查询之后,您可以选择@@identity以获取 mssql 服务器中最后插入的 id。

于 2012-08-01T12:38:23.457 回答
0

一种方法是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 回答