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

ASP.NET 事务可以说是在 .NET 平台上事务实现方式最简单的一种,你仅仅需要一行代码即可。在 aspx 的页面声明中加一个额外的属性,即事务属性 Transaction="Required" ,它有如下的值: Disabled (默认)、 NotSupported Supported Required RequiresNew ,这些设置和 COM+ 及企业级服务中的设置一样,典型的一个例子是如果你想在页面上下文中运行事务,那么要将其设置为 Required 。如果页面中包含有用户控件,那么这些控件也会包含到事务中,事务会存在于页面的每个地方。
        代码示例:
页面声明 Transaction="Required"
<%@ Page Transaction="Required"  Language="C#" AutoEventWireup="true" 
CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication4.WebForm3" %>
页面引用: using System.EnterpriseServices;
然后,数据操作代码:
protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        Work1();
        Work2();
        ContextUtil.SetComplete();   //提交事务
    }
    catch (System.Exception except)
    {
        ContextUtil.SetAbort();      //撤销事务
        Response.Write(except.Message);
    }  
}  
private void Work1()
{
    string conString = "data source=127.0.0.1;database=codematic;user id=sa;
      password=";
    SqlConnection myConnection = new SqlConnection(conString);
    string strSql = "Insert Into P_Category(CategoryId,Name)values('1',
      'test1')";
    SqlCommand myCommand = new SqlCommand(strSql, myConnection);
    myConnection.Open();
    int rows = myCommand.ExecuteNonQuery();
    myConnection.Close();
}
private void Work2()
{
    string conString = "data source=127.0.0.1;database=codematic;user id=sa;
      password=";
    SqlConnection myConnection = new SqlConnection(conString);
    string strSql = "Insert Into P_Category(CategoryId,Name)values('2',
      'test2')";
    SqlCommand myCommand = new SqlCommand(strSql, myConnection);
    myConnection.Open();
    int rows = myCommand.ExecuteNonQuery();
    myConnection.Close();
}
ContextUtil 是用于获取  COM+  上下文信息的首选类。由于此类的成员全部为 static ,因此在使用其成员之前不需要对此类进行实例化。
ASP.NET 页面事务的优势和限制如下。
l  优势:实现简单,不需要额外的编码。
    l限制:页面的所有代码都是同一个事务,这样的事务可能会很大,而也许我们需要的是分开的、小的事务实现在Web层。
     选自 《亮剑.NET. .NET深入体验与实战精要》 一书 5.4 节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值