今天在我的數據類中給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啦!
結束.
代碼寫的比較糙.見諒.