SQLiteCommand.Transaction Required?
本文关键字:Required Transaction SQLiteCommand | 更新日期: 2023-09-27 18:34:40
我正在使用System.Data.SQLite,我有一些代码,我将一系列命令包装在SQLite事务中。
是否需要将Transaction
属性设置为事务实例?似乎该命令会自动从连接中获取它。
这对我来说很重要的原因是确定我必须传递给辅助函数的内容 - 即只是对连接或事务的引用。
编辑:
下面是一个简化的示例。
private void ExecuteSql(SQLiteConnection conn, IEnumerable<string> sqlStatements)
{
using (var trans = conn.BeginTransaction())
{
try
{
foreach (var sql in sqlStatements) ExecuteSql(conn, sql);
}
catch
{
trans.Rollback();
throw; // pass up to higher level
}
trans.Commit();
}
}
private void ExecuteSql(SQLiteConnection conn, string sqlStatement)
{
using (var cmd = new SQLiteCommand(conn)
{
//Transaction = trans, -- necessary?
CommandText = sqlStatement,
})
{
cmd.ExecuteNonQuery();
}
}
不,不需要手动设置 Transaction
属性。
在事务打开时,您对连接所做的一切都将与该事务相关联。但是,这可能不适用于其他数据库引擎(尽管总的来说我认为确实如此(,因此,如果您更改数据库,请小心。
我发现 ADO.NET 接口无缘无故地令人费解;有很多冗余,提供商经常不得不跳过箍才能在接口的某些部分(例如IDataParameter
/IDataParameterCollection
怪物(获得最佳性能。