t-by的net blog

学习net的资料库

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

模拟事务
-------------------------------


或者找下关于这个类的资料看看:
<%@ Import Namespace="System.EnterpriseServices" %>
----------
<%@ Page Language="C#" Transaction="RequiresNew" %>
<%@ Import Namespace="System.EnterpriseServices" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat=server>
void Page_Load(Object sender , EventArgs e)
{
 SqlConnection conBank;
 string  strUpdateAccountA;
 string  strUpdateAccountB;
 SqlCommand cmdUpdateAccountA;
 SqlCommand cmdUpdateAccountB;

// Initialize objects
conBank = new SqlConnection(@"Server=localhost;Trusted_Connection=true;database=conBank" );

strUpdateAccountA = "Update AccountA set { Balance = Balance - 999.99 WHERE Customer=//Smith//";
cmdUpdateAccountA = new SqlCommand( strUpdateAccountA, conBank );

strUpdateAccountB = "Update AccountB set { Balance = Balance + 999.99 WHERE Customer=//Smith//";
cmdUpdateAccountB = new SqlCommand( strUpdateAccountB, conBank );

// Open connection
conBank.Open();

// try executing both commands
try
{
  cmdUpdateAccountA.ExecuteNonQuery();
  cmdUpdateAccountB.ExecuteNonQuery();

  // Commit the transaction
  ContextUtil.SetComplete();
  Response.Write( "Transaction Successful!" );
}
catch (Exception eX)
{
  ContextUtil.SetAbort();
  Response.Write( "Transaction Failed!" );
}

finally
{
  conBank.Close();
}
}

</script>

--

// 这个我自己写的

public void RunSqlTransaction(string myConnString,string sql1,string sql2)
 {
    SqlConnection myConnection = new SqlConnection(myConnString);
    myConnection.Open();

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

    // 开始事务
    myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted,"SampleTransaction");
    myCommand.Connection = myConnection;
    myCommand.Transaction = myTrans;

    try
    {
      myCommand.CommandText = sql1;
      myCommand.ExecuteNonQuery();
      myCommand.CommandText = sql2;
      myCommand.ExecuteNonQuery();
      myTrans.Commit();// ok
     
    }
    catch(Exception e)
    {
      try
      {
        myTrans.Rollback("SampleTransaction");
      }
      catch (SqlException ex)
      {
        if (myTrans.Connection != null)
        {
          Response.Write("错误类型为" + ex.GetType() + ",在试图滚回事务时遇到.");
        }
      }
   
      Response.Write("错误类型为" + e.GetType() + ",在插入数据时遇到.");
      Response.Write("两个记录都未写进数据库.");
    }
    finally
    {
      myConnection.Close();
    }
}

posted on 2005-12-20 22:49  钛网络  阅读(163)  评论(0编辑  收藏  举报