public static void Main()
{
DbTranSql tranTest=new DbTranSql();
tranTest.DoTran();
Console.WriteLine("事务处理已经成功完成。");
Console.ReadLine();
}
}
}
注意到其中的 SqlCommand 对象 myComm,它的 CommandText 属性仅仅是前面 SQL 代码字符串连接起来即可,当然,其中
的"GO"语句已经全部去掉了。这个语句就像普通的查询一样,程序将 SQL 文本事实上提交给 DBMS 去处理了,然后接收返回的结果
(如果有结果返回的话)。
很自然,我们最后看到了输出"事务处理已经成功完成",再用企业管理器查看 pubs 数据库的 roysched 表,所有 title_id 字段
以"PC"开头的书籍的 royalty 字段的值都增加了 0.1 倍。
这里,我们并没有使用 ADO.net 的事务处理机制,而是简单地将执行事务的 SQL 语句当作普通的查询来执行,因此,事实上该事务
完全没有用到.net 的相关特性。
了解.net 中的事务机制
如 你所 知, 在 .net 框 架中 主要 有两 个命 名空 间 (namespace) 用 于应 用程 序同 数据 库系 统的 交互 : System.Data.SqlClient 和
System.Data.OleDb。前者专门用于连接 Microsoft 公司自己的 SQL Server 数据库,而后者可以适应多种不同的数据库。这两个命名空
间 中 都 包 含 有 专 门 用 于 管 理 数 据 库 事 务 的 类 , 分 别 是 System.Data.SqlClient.SqlTranscation 类 和
System.Data.OleDb.OleDbTranscation 类。
就像它们的名字一样,这两个类大部分功能是一样的,二者之间的主要差别在于它们的连接机制,前者提供一组直接调用 SQL
Server 的对象,而后者使用本机 OLE DB 启用数据访问。 事实上,ADO.net 事务完全在数据库的内部处理,且不受 Microsoft 分布式
事务处理协调器 (DTC) 或任何其他事务性机制的支持。本文将主要介绍 System.Data.SqlClient.SqlTranscation 类,下面的段落中,除
了特别注明,都将使用 System.Data.SqlClient.SqlTranscation 类。
C#数据库事务原理及实践(上)
2002-10-08 15:02 作者:挽留刀出处:yesky 责任编辑:方舟
事务的开启和提交
现在我们对事务的概念和原理都了然于心了,并且作为已经有一些基础的 C#开发者,我们已经熟知编写数据库交互程序的一些要点,
即使用 SqlConnection 类的对象的 Open()方法建立与数据库服务器的连接,然后将该连接赋给 SqlCommand 对象的 Connection 属性,
将欲执行的 SQL 语句赋给它的 CommandText 属性,于是就可以通过 SqlCommand 对象进行数据库操作了。对于我们将要编写的事务
处理程序,当然还需要定义一个 SqlTransaction 类型的对象。并且看到 SqlCommand 对象的 Transcation 属性,我们很容易想到新建的
SqlTransaction 对象应该与它关联起来。
基于以上认识,下面我们就开始动手写我们的第一个事务处理程序。我们可以很熟练地写出下面这一段程序:
//DoTran.csusing System;