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();
                )
                {
                    MessageBox.Show("成功");
                    //事务提交
                    trans.Commit();
                }
                else
                {
                    MessageBox.Show("失败");
                    //事务回滚
                    trans.Rollback();
                }
            }
            catch (Exception)
            {
                //如果某个环节出现问题,则将整个事务回滚
                trans.Rollback();
            }

在C#中开启事务的更多相关文章

  1. DJango中开启事务的两种方式

    目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...

  2. 事务的隔离级别,mysql中开启事务、django中开启事务

    目录 一.事务的特性 二.数据库中开启事务 三.Django中开启事务的两种方式 第一种 第二种 四.事务的隔离级别 隔离级别 如何查看mysql隔离级别? 修改事务的隔离级别 隔离级别解释 read ...

  3. mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  4. 浅谈mysql中不同事务隔离级别下数据的显示效果

    事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那 ...

  5. springboot开启事务管理

    spring中开启事务管理需要在xml配置文件中配置,springboot中采取java config的配置方式. 核心是@EnableTransactionManager注解,该注解即为开启事务管理 ...

  6. django之查询操作及开启事务

    目录 聚合查询 aggregate 聚合函数 分组查询 annotate F与Q查询 F查询 Q查询 ORM操作事务 django中开启事务 聚合查询 aggregate 操作外键字段管理数据的时候, ...

  7. SQLServer数据库中开启CDC导致“事务日志空间被占满,原因为REPLICATION”的原因分析和解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6646143.html SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为:在执行增删改语句(产 ...

  8. Oracle database link中查询会开启事务吗?

    关于oracle database link,使用database link相关的查询语句是否会开启事务呢?我们知道,在数据库中一个简单的SELECT查询语句不会产生事务(select for upd ...

  9. $Django python中使用redis, django中使用(封装了),redis开启事务(管道)

    一 Python操作Redis之普通连接 #先安装 pip3 install redis import redis r = redis.Redis(host='127.0.0.1', port=637 ...

随机推荐

  1. 第二章 Js函数

      函数的定义二种定义 ①function myfunc () { console("hello"); }; ②var myfunc = function () { console ...

  2. 编译到底做了什么(***.c -> ***.o的过程)

     (第一次写博客,好激动的说.......)   我们知道,一个程序由源代码到可执行文件往往由这几步构成: 预处理(Prepressing)-> 编译(Compilation)-> 汇编( ...

  3. Visual Studio命令窗口

    命令”窗口用于直接在 Visual Studio 集成开发环境 (IDE) 中执行命令或别名.可以执行菜单命令和不在任何菜单上显示的命令.若要显示“命令”窗口,请从“视图”菜单中选择“其他窗口”,再选 ...

  4. javascript基础知识拾遗

    1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console ...

  5. Daily Scrum – 1/12

    Meeting Minutes Merge Wordlist & Word Recite entry. (P0) – Done. Remove "Word Challenge&quo ...

  6. 一篇让Java程序猿随时可以翻看的Oracle总结

    来源:http://www.cnblogs.com/bzx888/p/4820712.html 有关的语句和操作基本都是按照实战中的顺序来总结的,比如创建用户,建表,序列初始化,插入数据的顺序呢. 这 ...

  7. qt添加最小化和关闭按钮

    int width = this->width();//获取界面的宽度 //构建最小化.最大化.关闭按钮 QToolButton *minButton = new QToolButton(thi ...

  8. sql-in和not in

    IN .NOT IN这个指令可以让我们依照一或数个不连续 (discrete) 的值的限制之内抓出数据库中的值 in和not in in:存在与...里面的 not in:不存在与..里面的 其指令语 ...

  9. 【Gym 100685J】Just Another Disney Problem(交互/排序)

    第一次做交互题. 题意是有n个数(n<1000),你通过问1 a b,后台返回你YES代表a<b,NO代表a>b.要你在10000次询问内给出一个符合的排列.n=1000来说,100 ...

  10. jQuery返回顶部代码组件

    非原创,拿来修改,样式可自定义,div,img都可以,效果如下: 下载地址:http://files.cnblogs.com/files/EasonJim/jquery.topback.rar 项目相 ...