ACCESS数据库插入数据后,返回当前的自动编号ID。

@@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() 函数,具体没有尝试,感兴趣的朋友可以试一下。

posted @ 2012-12-09 22:14  本杰克  阅读(1070)  评论(1编辑  收藏  举报