1 SQL事务
    sql事务是使用SQL server自身的事务:在存储过程中直接使用Begin Tran,Rollback Tran,Commit Tran实现事务:
优点:执行效率最佳
限制:事务上下文仅在数据库中调用,难以实现复杂的业务逻辑。
Demo:(所有demo,都以SQL Server自带的Northwind数据的表Region为例)
带事务的储存过程:
CREATE PROCEDURE dbo.SPTransaction
     (
    @UpdateID int,
      @UpdateValue nchar(50),
    @InsertID int,
    @InsertValue nchar(50)
     )
AS
begin Tran
Update Region  Set RegionDescription=@UpdateValue where RegionID=@UpdateID
insert into Region Values (@InsertID,@InsertValue)
declare @RegionError int
select @RegionError=@@error
if(@RegionError=0)
COMMIT Tran
else
ROLLBACK Tran
GO
执行带事务的储存过程:
/// <summary>
        /// SQL事务:
        /// </summary>
        public void SQLTran()
        {
             SqlConnection conn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123;");
             SqlCommand cmd = new SqlCommand();
             cmd.CommandText = "SPTransaction";
             cmd.CommandType = CommandType.StoredProcedure;
             cmd.Connection = conn;
             conn.Open();
             SqlParameter[] paras= new SqlParameter[]{
                                        new SqlParameter ("@UpdateID",SqlDbType.Int,32),
                                        new SqlParameter ("@UpdateValue",SqlDbType .NChar,50),
                                        new SqlParameter ("@InsertID",SqlDbType.Int ,32),
                                        new SqlParameter ("@InsertValue",SqlDbType.NChar ,50)};
             paras[0].Value = "2";
             paras[1].Value = "Update Value1";
             paras[2].Value = "6";
             paras[3].Value = "Insert Value1";
            foreach (SqlParameter para in paras )
            {
                 cmd.Parameters.Add(para);
             }
             cmd.ExecuteNonQuery();   
         }
2 ADO.net事务
   Ado.net事务可能是大家一般都用的
优点:简单,效率和数据库事务差不多。
缺点:事务不能跨数据库,只能在一个数据库连接上。如果是两个数据库上就不能使用该事务了。
Demo:
         /// <summary>
        /// 一般的ADO.net 事务
        /// </summary>
        public void ADONetTran1()
        {
             SqlConnection conn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123;");
             SqlCommand cmd = new SqlCommand();
            try
            {
                 cmd.CommandText = "Update Region Set RegionDescription=@UpdateValue where RegionID=@UpdateID";
                 cmd.CommandType = CommandType.Text;
                 cmd.Connection = conn;
                 conn.Open();
                 SqlParameter[] paras = new SqlParameter[]{
                                        new SqlParameter ("@UpdateID",SqlDbType.Int,32),
                                        new SqlParameter ("@UpdateValue",SqlDbType .NChar,50)};
                 paras[0].Value = "2";
                 paras[1].Value = "Update Value12";

foreach (SqlParameter para in paras)
                {
                     cmd.Parameters.Add(para);
                 }
                //开始事务
                 cmd.Transaction = conn.BeginTransaction();
                 cmd.ExecuteNonQuery();

cmd.CommandText = "insert into Region values(@InsertID,@InsertValue)";
                 cmd.CommandType = CommandType.Text;

paras = new SqlParameter[]{
                                        new SqlParameter ("@InsertID",SqlDbType.Int ,32),
                                        new SqlParameter ("@InsertValue",SqlDbType.NChar ,50)};
                 paras[0].Value = "7";
                 paras[1].Value = "Insert Value";
                 cmd.Parameters.Clear();
                foreach (SqlParameter para in paras)
                {
                     cmd.Parameters.Add(para);
                 }                
                 cmd.ExecuteNonQuery();
                //提交事务
                 cmd.Transaction.Commit();
             }
            catch
            {
                //回滚事务
                 cmd.Transaction.Rollback();
                throw;
             }
            finally
            {
                 conn.Close();
             }
         }

转载于:https://www.cnblogs.com/chenbg2001/archive/2010/04/22/1717910.html

SQL事务与ADO.NET事务相关推荐

  1. 在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)

    项目涉及到多个数据库的查询更新操作,也就必然需要分布式事务的支持,查了MSDN知道 .net 2.0 中利用新增的 System.Transactions 命名空间可以简单的实现分布式事务: Syst ...

  2. SQL Server 数据库之使用事务

    使用事务 1. 开始事务 2. 结束事务 3. 回滚事务 4. 事务的工作机制 5. 自动提交事务 6. 事务的并发问题 6.1 脏读 6.2. 不可重复读 6.3. 幻读 7. 事务的隔离级别 7. ...

  3. 执行多条SQL语句,执行数据库事务(可传入Sql参数)

    上篇博客,实例介绍了一个事务执行多条SQL语句函数(int ExecuteSqlTran(List<String> SQLStringList))点击打开链接,方便之余又发现了它的缺陷-- ...

  4. 【概念原理】四种SQL事务隔离级别和事务ACID特性

    2019独角兽企业重金招聘Python工程师标准>>> 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UN ...

  5. mysql事务日志备份_事务日志备份 (SQL Server)

    事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...

  6. sql 在存储过程中使用事务(转)

    本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...

  7. SQL FILESTREAM数据库中的事务日志备份

    In the continuation of our SQL FILESTREAM article series, we'll be covering transaction log backups ...

  8. 转:SQL进阶之变量、事务、存储过程与触发器

    一.变量那点事儿 1.1 局部变量 (1)声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int (2)为变量赋值 SET ...

  9. oracle数据库事务日志已满,SQL Server中已满事务日志原因的检测(上)

    对于SQL Server数据库管理员来讲,已满事务日志是一个琐碎的,但又很常见的问题.它能引发事务的提前终止,甚至通过阻止所有事务的引入,从而引起系统的崩溃.对于数据库管理员来说,关键是理解将要发生的 ...

最新文章

  1. 【译】如何精确判断最终用户响应时间过长的原因?
  2. loop设备做LVM
  3. mysql导出二进制日志_使用mysqlbinlog提取二进制日志
  4. Java并发教程– CountDownLatch
  5. 【转】Mac本地生成SSH Key 的方法
  6. WSGI Application/Framework
  7. 【注意力机制】一系列关于attention的高效改进大集合
  8. Excel 2016中的新增函数之SWITCH
  9. Halcon教程十三:图像预处理
  10. 阿里云平台购买域名 域名配置 域名解析步骤
  11. linux内存显示少,linux 显示的内存怎么少于我实际的物理内存
  12. [图形计算器]Desmos
  13. 表格内容相同单元格合并
  14. 搜狗微信APP逆向(二)so层
  15. STP怎么选根桥和根端口
  16. 【VBA研究】保存和打开Excel文件的代码
  17. c语言读取一行的前几个字符串,c语言读取文件某一列 c语言 读取文件中某一行的前一行...
  18. 第7.12节 可共享的Python类变量
  19. 关于线性插值的一点理解
  20. 织梦dede建站仿站入门到精通

热门文章

  1. Activity管理类,随时随地退出应用程序
  2. 因果推断与反事实预测——几篇关联论文(二十六)
  3. caffe+GAN︱PPGN生成模型5则官方案例(caffe版)
  4. 表格开源的数据集FUSD数据集、TableBank数据集、DocBank数据集
  5. 52、基于模块化方式安装LAMP
  6. riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法
  7. 行存、列存,堆表、AO表性能对比 - 阿里云HDB for PostgreSQL最佳实践
  8. USB2.0学习笔记连载(四):安装Cypress官网套件
  9. Win10文件管理器那些你不知道的秘密
  10. org.hibernate.NonUniqueObjectException: