您现在的位置是:首页 > 文章详情

C# 使用SqlTransaction进行事务处理

会飞的猪2018-12-0448人围观
简介白码驿站是一个面向开发者的知识共享社区,专注于为开发者打造一个纯净的技术交流社区(源码下载,免费在线图片压缩,jquery插件,插件下载,JS/CSS在线压缩。)-白码驿站

事务处理基本原理   

       事务是将一系列操作作为一个单元执行,要么同时成功,要么同时失败,回滚到最初状态。在事务处理术语中,事务要么提交,要么中止。若要提交事务,所有参与者都必须保证对数据的任何更改是永久的。不论系统崩溃或是发生其他无法预料的事件,更改都必须是持久的。只要有一个参与者无法做出此保证,整个事务就会失败。事务范围内的所有数据更改将回滚到特定设置点。

        一般的操作是不会使用到事务操作的, 因为事务操作中造成表处于锁定状态,在一定的程度上造成效率低下,不过有些时候不得不使用事务, 例如本例中,需要在改变维修单状态的同时,插入付款的单据,这些操作必须是同时成功或者同时失败。所以必须使用事务。

下面就是事务的基本使用方法:

                                        
/// <summary>
/// 事务处理
/// </summary>
/// <param name="conn">数据库连接字符串</param>
public void SqlTransaction(string conn)
{
    //创建连接对象
    using (SqlConnection mySqlConnection = new SqlConnection(conn))
    {
        //打开连接
        mySqlConnection.Open();

        // 创建SqlTransaction 对象并用SqlConnection对象
        // BeginTransaction()方法开始事务
        SqlTransaction mySqlTransaction = mySqlConnection.BeginTransaction();

        try
        {
            // 创建保存SQL语句
            SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
            // 将Transaction属性设置为上面所生成的SqlTransaction对象
            mySqlCommand.Transaction = mySqlTransaction;
            // 将SqlCommand对象的CommandText属性设置为第一个INSERT语句,

            //执行语句 A
            mySqlCommand.CommandText = "UPDATE dbo.use_requestPayOut SET state = '2' WHERE requestPayOut_no =@requestPayOut_no";
            mySqlCommand.Parameters.AddRange(new SqlParameter[]{
                new SqlParameter("@requestPayOut_no","")
            });
            mySqlCommand.ExecuteNonQuery();

            //执行语句 B
            mySqlCommand.CommandText = string.Format("update Use_RepairBill set open_state='9',IsRefusal='' where request_no in ({0})", "");

            mySqlCommand.ExecuteNonQuery();

            // 提交事务,使INSERT语句增加的两行在数据库中保存起来
            mySqlTransaction.Commit();
        }
        catch (Exception)
        {
            //失败,事务回滚
            mySqlTransaction.Rollback();
        }

    }
}
                                


文章评论

Top

目录

昵称:会飞的猪

职业:.net程序员

邮箱:753109098@qq.com

分类标签

本栏推荐