我有一张表Absences
| Id | Name | Job |
-------------------------
| 1 | James | 1 |
-------------------------
| 2 | Simon | 1 |
-------------------------
其中ID是以{1}递增的标识Primary Key
我正在从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上出错了。对象引用未设置为对象的实例。
答案 0 :(得分: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();
答案 1 :(得分:1)
答案 2 :(得分:0)
在此查询之后,您可以选择 @@ identity 以获取mssql server中最后插入的ID。
答案 3 :(得分: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();
}