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();
    }
}

SQLiteCommand.Transaction Required?

不,不需要手动设置 Transaction 属性。

在事务打开时,您对连接所做的一切都将与该事务相关联。但是,这可能不适用于其他数据库引擎(尽管总的来说我认为确实如此(,因此,如果您更改数据库,请小心。

我发现 ADO.NET 接口无缘无故地令人费解;有很多冗余,提供商经常不得不跳过箍才能在接口的某些部分(例如IDataParameter/IDataParameterCollection怪物(获得最佳性能。