这段代码可靠吗?我尝试使用“使用”等。基本上是一种方法,可以作为 SQL 命令的序列列表传递,以针对 Sqlite 数据库运行。
我认为在 sqlite 默认情况下,在单个连接中运行的所有命令都是事务处理的,这是真的吗?这是真的?即我不应该(并且目前还没有进入代码)BeginTransaction 或 CommitTransaction。
它使用http://sqlite.phxsoftware.com/作为 sqlite ADO.net 数据库提供程序。
第一次尝试
private int ExecuteNonQueryTransactionally(List<string> sqlList)
{
int totalRowsUpdated = 0;
using (var conn = new SQLiteConnection(_connectionString))
{
// Open connection (one connection so should be transactional - confirm)
conn.Open();
// Apply each SQL statement passed in to sqlList
foreach (string s in sqlList)
{
using (var cmd = new SQLiteCommand(conn))
{
cmd.CommandText = s;
totalRowsUpdated = totalRowsUpdated + cmd.ExecuteNonQuery();
}
}
}
return totalRowsUpdated;
}
第三次尝试
这怎么样?
private int ExecuteNonQueryTransactionally(List<string> sqlList)
{
int totalRowsUpdated = 0;
using (var conn = new SQLiteConnection(_connectionString))
{
conn.Open();
using (var trans = conn.BeginTransaction())
{
try
{
// Apply each SQL statement passed in to sqlList
foreach (string s in sqlList)
{
using (var cmd = new SQLiteCommand(conn))
{
cmd.CommandText = s;
totalRowsUpdated = totalRowsUpdated + cmd.ExecuteNonQuery();
}
}
trans.Commit();
}
catch (SQLiteException ex)
{
trans.Rollback();
throw;
}
}
}
return totalRowsUpdated;
}
谢谢