在数据访问层把事务处理分解成最小的操作步骤
然后在商业逻辑层调用即可。。一个简单例子:
数据层:
public void _BeginTransaction()
public void _Execute(string sql)
public void _Commit()
public void _Rollback()
商业逻辑层:
xx._BeginTransaction()
try
{
    xx._Execute(sql);
}
catch(Exception objErr)
{
    xx._Rollback();
}
xx._Commit();和和,搞定。。

解决方案 »

  1.   

    if(DBConn.State==ConnectionState.Closed)
    {
    DBConn.Open();
    }
    DBTrans=DBConn.BeginTransaction();
    DBCmd=new SqlCommand();
    DBCmd.Connection=DBConn;
    DBCmd.Transaction=DBTrans;
    try
    {
              for(int i=0;i<Sql_str.Length;i++)
    {
    DBCmd.CommandText=Sql_str[i].ToString();
    DBCmd.ExecuteNonQuery();
    }
    DBTrans.Commit();
    Exstate=true;
    return;
    }
    catch
    {
    DBTrans.Rollback();
    MessageBox.Show("更新事务操作失败!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    Exstate=false;
    return;
    }
      

  2.   

    以上程序的数据操作对象均以定义,但并始化
    如DbCmd,你应该先定义为
    SqlCommand DbCmd;
    其它的也一样
      

  3.   

    zzxck() 兄的方式应该是可行的,但是这样就不能用到数据库的事务处理机制,而且自定义代码似乎太烦琐。
      

  4.   

    对不起,我的资质比较愚钝,dahuzizyd兄能不能用几行代码来说明一下。
      

  5.   

    使用com+的context管理就可以操作
      

  6.   

    如果用Com+编程,可以通过组建的事务来解决这个问题,呵呵
      

  7.   

    如果用Com+编程,可以通过组件的事务来解决这个问题,呵呵组件本身是有事务的