数据点: 再探System.Transactions

在 Microsoft .NET Framework 中,System.Transactions 命名空间使得事务的处理比采用以往任何 一种技术都要简单。此前,我曾经撰写过一个数据点专栏,介绍了 System.Transactions 在 Microsoft .NET Framework 2.0 Beta 1 以及 SQL Server 2005 下的工作方式。当然,在 产品的发布过程中,既增加了一些功能,也去掉了一些功能;有些 TransactionScopeOptions 已经发生 了变化。

从那以后,读者们提出了很多有关 System.Transactions 的问题,这也促使我下定决心再探其究竟。 下面,我们就来看看它现在的工作方式,我会告诉您如何使用这个命名空间、它在什么情况下有效以及在 什么情况下不能发挥作用。通过以下的内容,您将了解到如何充分利用 .NET 架构去更有效地使用命名空 间。此外,我还将使用一些事务来演示最佳的实践操作。本文用到的所有示例均可从 MSDN杂志网站 下载。

一语道破天机

我们先来看看如何将两条数据库命令转换为一个事务,具体方法就是 构建一个封装器把这两条命令封装起来。具体操作非常简单。只要引用 System.Transactions.dll,然后 把您需要的事务性代码封装在一个 using 语句内,这个 using 语句会创建一个 TransactionScope,最 后,在事务结束时调用 Complete 方法。

图 1 所显示的就是一个正在创建的事务,这个事务自身 还封装了多个数据库查询。只要任意一个 SqlCommand 对象引发异常,程序流控制就会跳出 TransactionScope 的 using 语句块,随后,TransactionScope 将自行释放并回滚该事务。由于这段代 码使用了 using 语句,所以 SqlConnection 对象和 TransactionScope 对象都将被自动释放。由此可见 ,只需添加很少的几行代码,您就可以构建出一个事务模型,这个模型可以对异常进行处理,执行结束后 会自行清理,此外,它还可以对命令的提交或回滚进行管理。

Figure 1 A Simple Transaction

// Create the TransactionScope
using (TransactionScope ts = new TransactionScope())
{
  using (SqlConnection cn2005 = new SqlConnection(someSql2005))
  {
    SqlCommand cmd = new SqlCommand(sqlUpdate, cn2005);
    cn2005.Open();
    cmd.ExecuteNonQuery();
  }
  using (SqlConnection cn2005 = new SqlConnection(anotherSql2005))
  {
    SqlCommand cmd = new SqlCommand(sqlDelete, cn2005);
    cn2005.Open();
    cmd.ExecuteNonQuery();
  }
  // Tell the transaction scope that the transaction is in
  // a consistent state and can be committed
  ts.Complete();
  // When the end of the scope is reached, the transaction is
  // completed, committed, and disposed.
}

您在图 1 中所看到的示例还有很多可以灵活设置的部分。TransactionScope 包含了所有的资 源管理器连接,这些连接会自动参与到事务中。这样一来,您就可以为 TransactionScope 设置不同的选 项,在图 1 的示例中,我们使用的是默认设置。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索事务
, transactions
, 2005
, sqlconnection
, 删除sqldelete
, 事务码
, TransactionScope
一个
system.transactions、dalton transactions、ieee transactions、isa transactions、transactions,以便于您获取更多的相关知识。

时间: 2024-12-30 10:00:27

数据点: 再探System.Transactions的相关文章

[老老实实学WCF] 第五篇 再探通信--ClientBase

原文:[老老实实学WCF] 第五篇 再探通信--ClientBase 老老实实学WCF 第五篇 再探通信--ClientBase   在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创建了通道,实现了和服务端的通信.然而,与服务端通信的编程模型不只一种,今天我们来学习利用另外一个服务类ClientBase<>来完成同样的工作,了解了这个类的使用方法,我们对服务引用中的关键部分就能够理解了.   Client

值得关注的五个关键数据点

30年前,数据不是很多,也不是什么问题.如果进行一项研究,就需要大量的分析,花时费力费人.不象今天一样,到处都是数据. 今天,任何人想进行研究,都可以使用SurveyMonkey.你可以给研究加链接,使用网站的工具,你可以成为专家,作图.写评论等. 我花了大量的时间对关于营销.媒体.产品 和消费者行为的数据和统计进行了分析.你的观点不应该建立在单一的数字基础上.但有些数字表明,你可以对习惯的真理提出质疑. 以下是我提出的会产生问题的五个关键数据点.我花了大量的时间列出这个列表,看一下它们是否会巩

数据点:从Silverlight 2观望云服务

本专栏基于 Silverlight 2 的预发布版本.文中的所有信息均有可能发生变更. 使用 Silverlight 的开发人员经常给人一种虚幻感,但这能责怪他们吗?从各种 Web 服务中为富 Internet 应用程序 (RIA) 获取数据正成为主流趋势.Silverlight 应用程序可以与 ASMX Web 服务.Windows Communication Foundation (WCF) Web 服务.具象状态传输 (REST) 服务和传统 XML (POX) 服务进行通信.无论这些服务

谈谈分布式事务之三 System.Transactions事务详解[上篇]

在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务..NET 2.0为了带来了全新的 事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集中的 System.Transactions命名空间下,我们直接称基于此的事务为System.Transactions事务. System.Transactions事务编程模型使我们可以显式(通过System.Transactions.Transaction)或者隐 式(基于System.Tran

事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)

1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是单个事务,每种数据库都有自己的实现,事务的深度内涵可以搜索查看相关的文章,不是本文介绍的重点. 1.2:System.Transactions.TransactionScope: 分布式事务,需要添加引用System.Transactions,同时启用MSDTC分布式事务服务:通常使用方式为:  u

为什么引用了System.transactions.dll文件后还是不能using?

问题描述 RT,已经引用System.transactions.dll但是无法usingtransactions?在同一机器里新建项目没有这个问题,只是在一个项目里出现,求解? 解决方案 解决方案二:里面,也没有这个命名空间.解决方案三:System.Transactions解决方案四:usingSystem.Transactions;解决方案五:楼上的意思是改成首字母大写吗?一样的,System.下面没有Transactions解决方案六:你看不是在一个库下面,或者看你引用对没

matlab如何生成如下图的数据点?

问题描述 matlab如何生成如下图的数据点? 解决方案 你是想拟合还是随便画画,随便画画可以用plot自己打点,要是拟合的话,给定数据,无非就是点.线.面,点有星号.加号等等,这个查下帮助文档 解决方案二: 点组成的实心圆 实心矩形

《经济导报》郭涛就“阿里华数或再联姻”发表评论

中国互联网协会专家委员.<经济导报>特约评论员郭涛在"阿里华数或再联姻 有望改变互联网生态"(详见<经济导报>2014/3/5)文中就阿里巴巴和华数传媒联姻阐述观点. 今(5)日,华数数字电视传媒集团(下称"华数集团")将开始发行3.5亿元短融券,其中1亿元用于补充公司日常运营资金,2.5亿元用于归还金融机构借款. 4日,有消息称其旗下上市公司华数传媒控股股份有限公司(华数传媒,000156)和阿里巴巴正在洽谈,华数传媒或选择以定向增发的形式

再探早期示例

为注意到一些利用新事件模型的例子和为学习程序从老到新事件模型改变的方法,下面的例子回到在本章第一部分利用事件模型来证明的一些争议.另外,每个程序包括程序片和应用程序现在都可以借助或不借助浏览器来运行. 1. 文本字段 这个例子同TextField1.java相似,但它增加了显然额外的行为:   //: TextNew.java // Text fields with Java 1.1 events import java.awt.*; import java.awt.event.*; impor