(1)直接写入sql中:在存贮过程中使用Begin Trans,Commit Trans
RollBack Trans实现
优势:1所有的事务逻辑包含在一个单独的调用中
2拥有运行一个事务的最佳性能
3独立于应用程序
限制:1事务上下文只保存在数据库调用中
2数据库代码与数据库系统有关,不便移植
(2)使用ADO.net实现:使用ADO.NET 实现,使用这种方式的优点是
可以在中间层来管理事务,当然你也可以选择在数据层来实现。
SqlConnection 和OleDbConnection对象有一个BeginTransaction方法,
它可以返回 SqlTransaction 或者OleDbTransaction 对象。而且这个
对象有 Commit 和 Rollback 方法来管理事务
优点 1简单性
2和数据据事务差不多的快
3独立于数据库,不同数据库的专有代码被隐藏了
缺点 1事务不能跨越多个数据库连接
2事务执行在数据库连接层上,所以需要在事务过程中维护
一个数据库连接
(3)COM+事务(分布式事务):要参与COM+事务,.NET 类必须是从
System.EnterpriseServices.ServicedComponent 类继承的,这可使得
该 .NET 类能够在 COM+ 内运行,通过使用System.EnterpriseServices.ContextUtil 类,
可以获得有关 COM+ 对象上下文的信息。它提供SetComplete 和 SetAbort 方法,
以便分别显式提交和回滚事务。正如您预想的那样,当所有操作已成功
执行后,紧随 try 程序块的最后调用 ContextUtil.SetComplete 方法
来提交事务。所引发的任何异常将在 catch 程序块中被捕获,该程序块
使用ContextUtil.SetAbort 中止事务。
例如:
Transaction(TransactionOption.Required)] //说明所有方法都是支持事务,实际应用中不必要只需在要添加事务的
//的方法前添加此属性即可
public class Class1 : ServicedComponent {
[AutoComplete] //自动、非自动
public void Example1()
{
…
}
}
完整的例子:
using system.EnterpriseServices;
using System.Sqlclient;
public class trans:System.EnterpriseServices.ServicedComponent
{
[Transaction(TransactionOption.Required)]
public string tansfermoneryFromBToA(double m)
{
try
{
ContextUtil.EnableCommit();
//执行sqla,可以是一个连接到sql上的数据库操作函数等
//执行sqlb,可以是以给连接到orcal上的数据库操作函数等
ContextUtil.SetComplete();
return "Transfer Succeed";
}
catch(Exception ex)
{
ContextUtil.setAbort();
return "TransFer failed ---" + ex.Message;
}
}
}
转载于:https://www.cnblogs.com/kuailewangzi1212/archive/2005/08/14/214588.html