@@IDENTITY (Transact-SQL)
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。——msdn
Access数据库不能同时执行多条SQL语句,在INSERT一条数据后想返回当前数据的ID并不像SQL Server数据库那么简单,但是可以通过在执行一个OleDbCommand时,同时执行两条SQL语句,当然了要首先要启用事务。
示例代码如下:
1 using (OleDbConnection connection = new OleDbConnection(connectionString)) 2 { 3 connection.Open(); 4 using (OleDbTransaction trans = connection.BeginTransaction()) 5 { 6 OleDbCommand cmd = new OleDbCommand(); 7 try 8 { 9 cmd.Connection = connection; 10 cmd.Transaction = trans; 11 cmd.CommandText ="INSERT INTO..."; 12 cmd.ExecuteNonQuery(); 13 cmd.CommandText = "SELECT @@INDENTITY as newID"; 14 15 int rowID = (Int32)cmd.ExecuteScalar(); 16 trans.Commit(); 17 return rowID; 18 } 19 catch (Exception E) 20 { 21 trans.Rollback(); 22 connection.Close(); 23 throw new Exception(E.Message); 24 } 25 26 } 27 28 }
这篇文章提到SCOPE_IDENTITY() 函数,具体没有尝试,感兴趣的朋友可以试一下。