zoukankan      html  css  js  c++  java
  • .NET中事务操作小结(1)

    在进行数据库操作的过程中,需要通过一种机制来保证数据的完整性,即称为事务

    基本的事务必须从属4个特点ACID(Atomicity,Consistency,Isolation and Duiability),即原子性,一致性,独立性,持久性,总体特点说明如下:

    Atomicity(原子性):在一个操作中涉及两个或两个以上独立的信息,这些信息要么全部提交,要么都不提交

    Consistency(一致性):操作要么创建新的有效的数据状态,要么(如果发生错误下)将所又的数据返回到初始状态

    Isolation(独立性):操作在没有提交并不与其他操作发生任何关系

    Duiability(持久性):即使操作过程中发生了错误需要重新启动,保存的已经提交的数据在正确的状态下任然有效

    。NET事务主体主要分成两种情况:手动事务和自动事务

    。NET目前提供了三种事务机制:

    (1)在SQL中使用事务

    (2)在ADO.NET中使用事务

    (3)分布式事务(Com+事务)—主要用于自动事务控制


    A:在SQL中使用事务

    关键字:Begin Trans,Commit Trans,RollBack Trans实现,这种方式最为简单

    --在SQL中使用事务
    begin Trans
    declare @orderError 
    int,@productError int
    delete from OrderList 
    where id=45
    select @orderError
    =@@Error

    delete from ProductList 
    where id=44
    select @productError
    =@@Error

    if(@orderError==0 and @productError==0)
    commit Trans
    else
    RollBack Trans
    //在SQL使用最为简单 不做过多介绍 

    B:在ADO.NET中使用事务:

    在ADO.net中主要通过Transaction对象来实现事务的基本处理。

    SqlConnection和OledbConnection对象有一个BeginTransaction方法,该方法返回一个SqlTransaction或者OleDBTransaction对象,而这两个对象中Commit和RollBack方法来管理事务处理。很简便明了

    其中在ADO.net主要特点是:

    优点是: 

    (A)操作简单(主要是对象几个方法)和数据库事务差不多

    (B)独立于数据库 不同数据库专有代码被隐藏了

    缺点是:

    (A)事务不能跨多个数据库连接(分布式事务可以跨多个数据库)

    (B)事务执行必须依靠一个存在的数据库连接,从Transaction对象生成就可以看出通过SqlConnection或OleDBConnection对象获得。

    (C)ADO.net中分布式事务可以跨多个数据库,如果其中一个是SQLServer数据库的话,通过SQLserver连接服务器连接别的数据库,但如果是DB2和Oracle之间就不行。如下实例代码:

    --在ADO.net中添加事务
    --连接字符串已知conStr

    using(SqlConnenction getCon=new SqlConnection(conStr))
    {
       
    //open Connection
       getCon.open();
       
    //声明一个SqlTransaction
       SqlTransaction getTran=getCon.BeginTransaction();
       SqlCommand getCmd
    =new SqlCommand();
       getCmd.Connection
    =getCon;
       
    //定义命令操作事务
       getCmd.Transaction=getTran;
       
       
    //通过一个Try-Catch
       try
       
    {
         
    //执行第一条SQL语句
         getCmd.CommandText="insert into OrderList('德国柏林')";
         getCmd.ExecuteNonQuery();
         
    //执行第二条SQL语句
          getCmd.CommandText="delete from OrderList where id=1425";
         getCmd.ExecuteNonQuery(); 
         
    //若没有异常提交事务
          getTran.Commit();
       }
    catch(Exception ce)
       
    {
        
    //出现异常 事务回滚
         getTran.RollBack();
       }
    finally
       
    {
        
    //关闭数据库连接 使用了Using快就不需要了
        
    // getCom.close();
       }

        
       
    }

    分布式事务 在小结(2)重点讲详细讲解

  • 相关阅读:
    4、pytest -- fixtures:明确的、模块化的和可扩展的
    CentOS -- 新建用户并使能密钥登录
    3、pytest -- 编写断言
    2、pytest -- 使用和调用
    1、pytest -- 安装和入门
    《Fluent Python》 -- 一个关于memoryview例子的理解过程
    SecureCRT 连接 Centos7.0 (NAT模式),且能连接公网。
    SecureCRT 连接 Centos7.0 (桥接模式),且能连接公网。
    Centos7.0 三种网络适配器
    Centos 7.0 界面
  • 原文地址:https://www.cnblogs.com/chenkai/p/1408297.html
Copyright © 2011-2022 走看看