SqlConnection.BeginTransaction对象的用途是什么

时间:2010-06-13 07:02:24

标签: c#

当我通过ADO.NET连接到数据库时。至于SqlConnection对象,它有一个函数:BeginTransaction,有3个重载。我不知道如何使用它以及它的功能是什么?

2 个答案:

答案 0 :(得分:2)

交易确保工作块以ACID方式运行 - 全部或全部。

在跟踪长时间运行的事务时,可选名称对DBA很有用。在TSQL 中直接,名称对于保存点等更重要 - 但在OO世界中,你有一个对象。

isolation level确定 ACID的方式。 Serializable是最纯粹的,但在额外的锁(键范围锁等)方面有更多的开销。

典型用法是:

using (SqlTransaction tran = conn.BeginTransaction()) 
{
    try 
    {
        /* work here, assigning "tran" onto
         * any commands */
        tran.Commit();
    } 
    catch 
    {
        tran.Rollback();
        throw;
    }
}

在许多方面,使用TransactionScope更简单 - 这会创建一个环境事务,命令会自动登记到该事务中。它也可以跨越DTC的多个dbs等:

using(TransactionScope tran = new TransactionScope()) 
{
    /* work here; no need to assign tran to anything */
    tran.Complete();
}

答案 1 :(得分:0)

事务用于保证一组操作(sql语句)全部执行(提交)或者不执行任何操作(回滚)。

典型用法是两个或多个表的更新必须全部成功(或全部失败)。