1、手动提交

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient;

using System.EnterpriseServices;

namespace prjEnterprise

{

    [Transaction(TransactionOption.Required)]

    public class clsES : System.EnterpriseServices.ServicedComponent

    {

        public SqlConnection Conn;

        public void dbAccess(int pID1, int nScore)

        {

            try

            {

                SqlConnection Conn = new SqlConnection("user id=sa;password=;Initial Catalog=myDataBase;Data Source=.;");

                Conn.Open();

                SqlCommand sqlCommand = new SqlCommand("UPDATE ComAction SET userScore = " + nScore + " WHERE userID = " + pID1, Conn);

                sqlCommand.ExecuteNonQuery();

                ContextUtil.SetComplete();

                Conn.Close();

            }

            catch (Exception e)

            {

                ContextUtil.SetAbort();

                throw e;

            }

            finally

            {

            }

        }

    }

}

2、自动提交

在数据记录部分为事务性操作,一条失败全部回滚。一上方法的缺点就不用说了,总之是个没头脑的方法,面向对象,应该申请课程相关的方法在课程类中实现,费用操作的方法在费用类中实现,应用层在一个申请课程的方法中调用相关类,但有个问题,如果面向对象则事务如何实现,要知道以上三条SQL语句应该是要不都成功如果有一句不成功应该全部回滚,那应该怎么实现看如下代码:

using System;

using System.Data;

using System.Data.OleDb;

using System.Collections;

using System.EnterpriseServices;

namespace test

{

 /**//// <summary>

 /// 客户类

/// </summary>

public class Client

{

 //客户的申请选课方法

 private void Apply()

 {

  //实例化过程类

  MyCourse myCourse=new MyCourse();

  //过程中加入一个课程类

   myCourse.Course.Add(new Elective());

   //过程中加入一个费用类

   myCourse.Course.Add(new Tuition());

   //实例化事务类

  MyTransaction mTransaction=new MyTransaction();

   try

   {

   //用事务类的提交方法提交过程类,过程类中的任何方法异常将导致回滚

    mTransaction.MyCommit(myCourse);

   }

   catch(Exception e)

  {

     Console.WriteLine(e.Message);

  }

   }

 }

 /**//// <summary>

 /// 费用类

 /// </summary>

 public class Tuition:Iwork

 {

  //实现费用相关的数据库操作

  public void Working()

 {

  OleDbConnection oConn=new OleDbConnection("server=localhost");

  oConn.Open();

  OleDbCommand oCmd=new OleDbCommand();

  oCmd.Connection=oConn;

 oCmd.CommandText="insert into table1 values('test',1)";

 oCmd.ExecuteNonQuery();

 oCmd.CommandText="update table2 set ttt='test'";

 oCmd.ExecuteNonQuery();

 oConn.Close();

}

 }

/**//// <summary>

 /// 选课类

/// </summary>

public class Elective:Iwork

{

 //实现选课相关的数据库操作

 public void Working()

 {

  OleDbConnection oConn=new OleDbConnection("server=localhost");

  oConn.Open();

  OleDbCommand oCmd=new OleDbCommand();

  oCmd.Connection=oConn;

   oCmd.CommandText="insert into table3 values('test',10)";

   oCmd.ExecuteNonQuery();

  oConn.Close();

 }

}

/**//// <summary>

/// 事务类

 /// </summary>

 [Transaction(TransactionOption.Required)]

 public class MyTransaction:ServicedComponent

 {

 //提交方法,AutoComplete属性指定异常自动回滚

 [AutoComplete]

  public void MyCommit(MyCourse l_mCourse)

 {

    l_mCourse.MyRuning();

 }

}

/**//// <summary>

/// 过程类

/// </summary>

 public class MyCourse

 {

  private ArrayList alCourse;

 public MyCourse()

 {

   alCourse=new ArrayList();

  }

  //保存代调用类

  public ArrayList Course

   {

  get

   {

     return alCourse;

  }

  }

 //运行Course中类的Wroking方法

  public void MyRuning()

 {

   foreach(object o in alCourse)

  {

    if(o is Iwork)

    {

    Iwork iw=(Iwork)o;

    iw.Working();

  }

  } 

 }

}

interface Iwork

{

 void Working();

 }

}

 

以上代码实现用Com+中的事务处理实现我们想要的方法。