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啦!

 

結束.

 

代碼寫的比較糙.見諒.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM