SQLite中获取最新添加自增ID,last_insert_rowid()的使用

今天在我的数据类中给Add方法完善一下.想要实现添加之后返回添加的实体的自增ID,遂想起了select last_insert_rowid(),可是用了之后就是不好使,各种返回0,

后来经度娘指教,我发现一句话"在同一个SQLiteConnection中...",原来如此.修改代码,搞定!

 

我之前是这么写的

DBHelperSQLite.ExecuteSql(sql,parameters);

return Convert.ToInt32(DBHelperSQLite.GetSingle("select last_insert_rowid()"));

注意:由于我的DBHelper写法的原因,这样的话就变成了两个SQLiteConnection

改进后

return DBHelperSQLite.ExecuteSql(sql+ ";select last_insert_rowid();", parameters);

DBHelper修改

 1 public static int ExecuteSql(string SQLString, List<SQLiteParameter> para)

 2     {

 3         using (SQLiteConnection connection = new SQLiteConnection(connectionString))

 4         {

 5             using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))

 6             {

 7                 try

 8                 {

 9                     connection.Open();

10                     foreach (SQLiteParameter p in para)

11                     {

12                         cmd.Parameters.Add(p);

13                     }

14                     int rows =0;

15                     if(SQLString.IndexOf("insert") != -1)

16                         rows = Convert.ToInt32(cmd.ExecuteScalar());

17                     else

18                         rows = cmd.ExecuteNonQuery();

19                     return rows;

20                 }

21                 catch (SQLiteException e)

22                 {

23                     connection.Close();

24                     throw e;

25                 }

26             }

27         }

28     }

注意15行到18行,判断是否是insert操作.然后执行cmd.ExecuteScalar(),而不是cmd.ExecuteNonQuery().这样就实现在同一个SQLiteConnection啦!

 

结束.

 

代码写的比较糙.见谅.

你可能感兴趣的:(sqlite)