我的这个系统是用的三层架构,BLL层,DLL层,Model层。连接数据库及对数据库的操作我在DLL层里的sqlhelper.cs这个文件里,我现在在做一个客户资料的页面,客户资料有两个表存储,一个是客户的信息,一个是联系人的信息(因为一个客户要求有多个联系人,所以我分两个表保存信息),在页面上上半部分是填写客户信息的,下部分我用的是table方式填写联系人信息的(用JS控制添加一行或删除一行来实现添加一个联系人或删除一个联系人),还有一个“保存”的按钮,保存的时候我想用事务处理,这样在存入数据库中出现问题好回滚数据,保持数据库中的数据的正确性,可是我不知道这个事务处理怎么写,请大家帮忙。

解决方案 »

  1.   

    使用 TransactionScope    试试using(TransactionScope scope = new transactionScope())
    {
         代码
    }
      

  2.   

    业务层中不用connection.
    在dal中声明一个属性来包装DbTransaction,
    bll中得到.用事务的方法传同一个DbTransaction
    using(IDbTransaction tran=CreateTransaction())
    {
        Method1(tran);
        Method2(tran);
        tran.Commit();
    }
      

  3.   

    create proc [dbo].[proc]
    @TermId int
    as 
    begin transaction
    declare @errorSum int
    set @errorSum=0
    update table set ?=?
    update table set ?=?
    set @errorSum=@errorSum+@@error
    if @errorSum>0
        begin
            rollback transaction
        end
    else
        begin
            commit transaction
        end调用存储过程。上边写在存储过程里。
      

  4.   

    LZ 的 DLL 中没有事务处理?
      

  5.   

    最基础数据处理方式:
    public void Execute(string commandString)
    {
          SqlTransaction transaction = connection.BeginTransaction("SaveData");
          try
          {
        ExecuteCommand(commandString, transaction);
        transaction.Commit();
    }
    catch(Exception e)
    {
    transaction.Rollback();
    throw e;
    }
    } private void ExecuteCommand(string commandString, SqlTransaction transaction)
    {
    if(commandString != null)
    {
                    SqlCommand command=new SqlCommand(commandString);
    command.Connection = connection;
    command.Transaction = transaction;
    command.ExecuteNonQuery();
    }
    }
      

  6.   


            /// <summary>
            /// 在一个事务中执行一组任务
             /// </summary>
            /// <param name="dataAccesses">一组任务</param>
            /// <returns>成功返回 true ; 否则 false</returns>
            public static bool BatchExecuteNonQuery(params DataAccess[] dataAccesses)
            {
                bool Success = false;
                DbConnection connection = dataAccesses[0].Connection;            if (connection.State != ConnectionState.Open)
                    connection.Open();            DbTransaction trans = connection.BeginTransaction(IsolationLevel.ReadCommitted);            try
                {
                    foreach (DataAccess dataAccess in dataAccesses)
                    {
                        dataAccess.Command.Connection = connection;
                        dataAccess.Command.Transaction = trans;                    dataAccess.Command.ExecuteNonQuery();
                    }                trans.Commit();
                    Success = true;
                }
                catch (Exception e)
                {
                    trans.Rollback();
                    throw e;
                }
                finally
                {
                    dataAccesses[0].Connection.Close();
                }            return Success;
            } 
    代码你相应的改一下就好了。 
      

  7.   


    我 r 都一个月了
    你就是 花 5秒钟 google一下 也出来了啊存储过程事务
      

  8.   

    个人认为在BLL层获取连接,启动事务
    这样灵活怎么写代码,不要问我