事务-手动事务(ado.net)

原创 2004年06月23日 17:05:00

事务类型:

   1,手动事务:用开始和结束事务的显式指令(BEGIN TRANSACTION 和 END TRANSACTION )控制事务边界。从一个事务边界内可以开始第二个被称为嵌套事务的事务。直到所有从属事务提交,其父事务才提交。

   2:自动事务:基于每个组件的声明特性集管理事务边界。事务自动流向被指示参与事务的对象,并跳过被指示在事务外部执行的对象。使用自动事务模型时无法嵌套事务。

分布式事务处理 (TP):分布式事务处理 (TP) 系统旨在协助在分布式环境中跨异类的事务识别资源的事务。

手动事务和 ADO.NET

SQL 客户端和 OLE DB .NET 提供程序在公共语言运行库中支持手动事务。在 ADO.NET 中,这两个 .NET 提供程序都可以用来控制事务。

应使用 ADO.NET 连接对象 Connection.BeginTransaction 开始本地事务。用 Command 对象的 Transaction 属性登记该事务中的命令。使用 Transaction 对象根据事务组件的成功或失败而提交或回滚在数据源做的修改。

登记在默认情况下是自动的,而且可以禁用。如果禁用了自动登记,您可以手动登记。在一个现有分布式事务中使用 Connection.EnlistDistributedTransaction 进行登记。

若要执行事务,请执行下列操作:

  1. 调用 Connection 对象的 BeginTransaction 方法来标记事务的开始。BeginTransaction 方法返回对 Transaction 的引用。该引用将分配给登记在事务中的 Command 对象。
  2. Transaction 对象分配给要执行的 CommandTransaction 属性。如果通过活动的 Transaction 对象对 Connection 执行 Command,但该 Transaction 对象尚未分配给 CommandTransaction 属性,则将引发异常。
  3. 执行所需的命令。
  4. 调用 Transaction 对象的 Commit 方法来完成事务,或调用 Rollback 方法来取消事务。

myConnection.Open();

SqlTransaction myTrans = myConnection.BeginTransaction();

SqlCommand myCommand = myConnection.CreateCommand();
myCommand.Transaction = myTrans;

try
{
  myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
  myCommand.ExecuteNonQuery();
  myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
  myCommand.ExecuteNonQuery();
  myTrans.Commit();
  Console.WriteLine("Both records are written to database.");
}
catch(Exception e)
{
  try
  {
    myTrans.Rollback();
  }
  catch (SqlException ex)
  {
    if (myTrans.Connection != null)
    {
      Console.WriteLine("An exception of type " + ex.GetType() +
                        " was encountered while attempting to roll back the transaction.");
    }
  }

分布事务:

如果 Connection 对象确定事务是活动的,它将自动登记在现有的分布式事务中。当打开连接或从连接池中检索连接时,将发生自动事务登记。这种情况,如果在Connection打开后,如果想再将新的的操作(command)登记入事务使不可能的。此时,应禁用自动登记功能:

   sqlserver为在连接字符串中设置Enlist字段为false:Enlist=false

   oledb中为OLE DB Services=-7

此时可以使用 EnlistDistributedTransaction 在事务中登记 Connection

SqlConnection nwindConn = new SqlConnection(".......;Enlist=false;");

SqlCommand cmd = new SqlCommand("......", nwindConn);

...

nwindConn.Open();

ITransaction trans =(ITransaction)ContextUtil.Transaction;//获取当前分布事务

nwindConn.EnlistDistributedTransaction(trans);//之前必须nwindConn.Open();

try
    {
      cmd.ExecuteNonQuery();//执行事务

      ContextUtil.SetComplete();//提交事务
    }
    catch (SqlException e)
    {
     ContextUtil.SetAbort();
    }
    finally
    {
      nwindConn.Close();
    }



C# ADO.Net事务处理

SQL Server中的事务可以将多个数据库增删改查操作合并为单个工作单元,在操作过程中任何部分出错都可以滚回已经执行的所有更改.ADO.Net中也提供了事务处理功能,通过ADO.net事务,可以将多...
  • miniduhua
  • miniduhua
  • 2016年10月21日 14:23
  • 3248

.NET开发中的事务处理大比拼 之 ADO.NET级别的事务

现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的C#开发者,我们已经熟知编写数据库交互程序的一些要点,即:(1)使用SqlConnection类的对象的Open()方法建立与数据库服务...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:13
  • 1209

.NET简谈事务、分布式事务处理

在本人的 “ .NET简谈事务本质论”一文中我们从整体上了解了事务模型,在我们脑子里能有一个全局的事务处理结构,消除对数据库事务的依赖理解,重新认识事务编程模型。 今天这篇文章我们将使用.NET...
  • moonpure
  • moonpure
  • 2016年07月28日 18:13
  • 3331

数据库开发及ADO.Net_2_高级事务sql编程存储过程视图触发器

  • 2018年01月08日 09:52
  • 405KB
  • 下载

数据库开发及ADO.Net_1_高级事务sql编程存储过程视图触发器

  • 2018年01月08日 09:49
  • 2.47MB
  • 下载

轻轻松松掌握ADO.NET事务处理方法技巧

  • 2015年02月03日 23:47
  • 34KB
  • 下载

ADO.NET 事务控制

在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务。若要执行事务,请执行下列操作: 1.调用Connection 对象的BeginTransactio...
  • suixufeng
  • suixufeng
  • 2013年10月12日 10:11
  • 972

ADO.NET 2种事务处理方法

第一种是SqlTransaction类事务处理,基于.NET代码上的事务处理。详细信息访问:http://www.cnblogs.com/windows/articles/1605636.htm 优...
  • hongkaihua1987
  • hongkaihua1987
  • 2012年03月03日 00:51
  • 292

黑马程序员之ADO.NET学习笔记: SqlTransaction(事务)

1.代码中的事务     现在代码中基本使用存储过程来控制事务的处理,通过代码进行控制事务也是我们学习ADO.NET的任务之一!   事务是在连接对象之后创建,并把它跟命令对象进行关联,使用try.....
  • xutingzhou
  • xutingzhou
  • 2012年09月07日 11:36
  • 240

在ADO.NET中实现事务

1. ADO.NET事务的主要成员  需要使用事务管理的情况很多,在数据层使用得特别广泛,几乎每一个系统的数据层都会实现事务。数据层的事务都是继承自DBTransaction,派生自IDbT...
  • wyxhd2008
  • wyxhd2008
  • 2012年09月06日 09:11
  • 749
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:事务-手动事务(ado.net)
举报原因:
原因补充:

(最多只允许输入30个字)