public int ExecuteSqlList(string[] sqlStr) { int i = 0; using (SQLiteTransaction dbTrans = conn.BeginTransaction()) { using (SQLiteCommand cmd = conn.CreateCommand()) { try { foreach (string item in sqlStr) { if (item != null && item != "") { cmd.CommandText = item; cmd.CommandType = CommandType.Text; int j=cmd.ExecuteNonQuery(); i+=j; } } dbTrans.Commit(); } catch { dbTrans.Rollback(); } } } return i;
代码如上,发现这个函数返回值一直是0.
在i+=j出加断点调试,发现不会执行该语句,函数貌似只进入了foreach循环一次,就返回了。
是事务的特性导致的吗?
当然不是,要看你数组有多少个
我数组长度是2000,但还是只执行一次
SQLite将把全部要执行的SQL语句先缓存在内存当中,然后等到COMMIT的时候一次性的写入数据库。
事务要么全部执行成功,要么全部执行失败。貌似这种写法不合理