zoukankan      html  css  js  c++  java
  • 事务

    1、创建事务的结构

     SqlConnection   sqlConnection   =   new   SqlConnection();   
      ...初始化连接   
      //   开启事务   
      SqlTransaction   sqlTransaction   =   sqlConnection.BeginTransaction();   
      //   将事务应用于Command   
      SqlCommand   sqlCommand   =   new   SqlCommand();   
      sqlCommand.Connection   =   sqlConnection;   
      sqlCommand.Transaction   =   sqlTransaction;     
      try   
      {   
      //   利用sqlcommand进行数据操作   
      ...   
      //   成功提交   
      sqlTransaction.Commit();   
      }   
      catch(Exception   ex)   
      {   
      //   出错回滚   
      sqlTransaction.Rollback();   
      }  

    2、简单例子

    DataTable   dt   =   new   DataTable();   
    System.Data.SqlClient.SqlConnection   cnn   =   new   System.Data.SqlClient.SqlConnection("连接字符串");   
    System.Data.SqlClient.SqlCommand   cm   =   new   System.Data.SqlClient.SqlCommand();   
    cm.Connection   =   cnn;   
    cnn.Open();   
    System.Data.SqlClient.SqlTransaction   trans   =   cnn.BeginTransaction();   
    try   
    {   
      foreach(DataRow   dr   in   dt.Rows)   
      {  
        cm.CommandText   =   "update   [表]   set   [数量]   =   @amount   where   productID   =   @productID";   
        cm.Parameters.Add("@amount",SqlDbType.Int);   
        cm.Parameters["@amount"].Value   =   Convert.ToInt32(dr["amount"]);   
        cm.Parameters.Add("@productID",SqlDbType.VarChar);   
        cm.Parameters["@productID"].Value   =   dr["productID"].ToString();   
        cm.ExecuteNonQuery();   
      }   
      trans.Commit();   
    }   
    catch   
    {   
      trans.Rollback();   
    }   
    finally   
    {   
      cnn.Close();   
      trans.Dispose();   
      cnn.Dispose();   
    }

    3、SQl server中的事务例子

    begin transaction 
    save transaction A
    
    insert into demo values('BB','B term')
    rollback TRANSACTION A
    
    create table demo2(name varchar(10),age int)
    insert into demo2(name,age) values('lis',1)
    rollback transaction
    
      insert into demo values('BB','B term')
    
     commit TRANSACTION A
    
     commit TRANSACTION  

    4、注意

      1。事务必须在连接打开后BeginTransaction();

      2.事务添加到SqlCommand(sqlCommand.Transaction   =   sqlTransaction;   )

      3、其他数据库对应做相应调整

    5、原理

     1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。

     2.事务的语句

      开始事物:BEGIN TRANSACTION
      提交事物:COMMIT TRANSACTION
      回滚事务:ROLLBACK TRANSACTION

      3.事务的4个特性

       原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,是不可折分的,事务是一个完整的操作。
       一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。
       隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式来影响其他事务。
       持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库。

     4.事务的分类(按事务的启动与执行方式,可以将事务分为3类)

         显示事务 :也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务
         自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。
        隐性事务:当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。

  • 相关阅读:
    Android Studio 快捷键
    Mac 下面,添加android adb命令(一般环境变量的添加方法)
    快速掌握 Android Studio 中 Gradle 的使用方法
    JAVA 十六进制与字符串的转换
    总结自己的Git常用命令
    Android性能优化典范---转
    【.NET Core微服务实战-统一身份认证】开篇及目录索引
    调用API修改Ocelot的配置文件
    VUE组件汇总
    Vue + GraphQL初试
  • 原文地址:https://www.cnblogs.com/fjptwwf/p/5623537.html
Copyright © 2011-2022 走看看