zoukankan      html  css  js  c++  java
  • 在C#中开启事务

    在C#中开启事务

     1.为什么要开启事务:

    举一个简单的例子:在银行业务中,有一条记账原则,即又借有贷。为了保证这种原则,每发生一笔银行业务,就必须保证会计账目上借方科目和贷方科目至少个少一笔,并且这两笔要么同时成功,要么同时失败。  

       事务是一个单个的工作单元。如果某一个事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久部分。如果事务遇到错误,这时必须进行回滚操作,则所有数据更改均被清除。

    2.在C#中开启事务

    我们都知道在数据库中如何开启事务,那么如果想通过在C#中开启事务必须借助Transaction类。

    3.在C#中开启事务的步骤

    01.调用SqlConnection对象的BeginTransaction()方法,创建一个SqlTransaction对象,标志事务开始。

    02.将创建的SqlTransaction对象分配给要执行的SqlCommand的Transaction属性。

    03.调用相应的方法执行SqlCommand命令。

    04.调用SqlTransaction的Commit()方法完成事务。或调用Rollback()方法终止事务。  

    4.在进行事务操作中的注意点

    01.在调用BeginTransaction()方法开始事务之前,要打开数据库连接,否则出现异常。

    02.如果在事务的Commit()方法或RollBack()方法执行前数据库连接断开或关闭,则事务将回滚。

    5.添加年级信息时候的事务处理例子

    复制代码

     //准备连接字符串
                string str = "data source=.;initial catalog=Myschool;uid=sa;pwd=123";
                //创建数据库连接对象
                SqlConnection con = new SqlConnection(str);
                //sql语句:添加一条记录到年级表
                string sql = "insert into grade values(@gradename)";
                //创建SqlParameter对象,设置参数
                SqlParameter sp = new SqlParameter("@gradename", txtgradename.Text);
                //创建命令对象
                 SqlCommand cmd = new SqlCommand(sql, con);
                 //通过Parameter集合的add()方法天填充参数集合
                 cmd.Parameters.Add(sp);
                //打开连接
                 con.Open();
                //默认让SqlTransaction对象为空
                 SqlTransaction trans = null;
                //开启事务:标志事务的开始
                 trans = con.BeginTransaction();
                try
                {
                    //将创建的SqlTransaction对象分配给要执行的sqlCommand的Transaction属性
                    cmd.Transaction = trans;
                    //执行sql如果添加成功放回1
                    int count=cmd.ExecuteNonQuery();
                    if (count > 0)
                    {
                        MessageBox.Show("成功");
                        //事务提交
                        trans.Commit();
                    }
                    else 
                    {
                        MessageBox.Show("失败");
                        //事务回滚
                        trans.Rollback();
                    }
                }
                catch (Exception)
                {
                    //如果某个环节出现问题,则将整个事务回滚
                    trans.Rollback();
                }

    复制代码

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/grj001/p/12225496.html
Copyright © 2011-2022 走看看