gpt4 book ai didi

c# - SQLiteCommand.Transaction 需要吗?

转载 作者:行者123 更新时间:2023-12-03 18:50:32 24 4
gpt4 key购买 nike

我正在使用 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 接口(interface)毫无道理地令人费解。有很多冗余,并且提供者经常不得不跳过箍来获得界面某些部分的最佳性能(例如 IDataParameter/IDataParameterCollection 怪物)。

关于c# - SQLiteCommand.Transaction 需要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com