Database dbTest;
dbTest = DatabaseFactory.CreateDatabase(strConn);
DbCommand dbCommand  = dbTest.GetSqlStringCommand("Insert ......");  
using (DbConnection conn = dbTest.CreateConnection())
{    
    conn.Open();
    DbTransaction dbTransation = conn.BeginTransaction(); 
    try
    {
        dbTest.ExecuteNonQuery(dbCommand);
        ///执行完成就回滚
        dbTransation.Rollback();
        //直接在这回滚,但还是会保存数据
    }是使用方法有什么不对吗?

解决方案 »

  1.   

    你还没有把事务提交就回滚了,当然不起作用!
    你把的try部分改成下面这样试试:try 

       dbTest.ExecuteNonQuery(dbCommand); 
       dbTransation.Commit(); //提交事务   

    catch
    {
       dbTransation.Rollback(); //如果发生异常,事务回滚
    }
      

  2.   

    conn.Open(); 
        DbTransaction dbTransation = conn.BeginTransaction();
        dbCommand.Transaction = dbTransation; // 注意这里
        try 
        { 
            dbTest.ExecuteNonQuery(dbCommand); 
            ///执行完成就回滚 
            dbTransation.Rollback(); 
            //直接在这回滚,但还是会保存数据 
        } 
      

  3.   

    Database dbTest;
    dbTest = DatabaseFactory.CreateDatabase(strConn);
    DbCommand dbCommand  = dbTest.GetSqlStringCommand("Insert ......"); 
    using (DbConnection conn = dbTest.CreateConnection())
    {   
        conn.Open();
        DbTransaction dbTransation = conn.BeginTransaction();
        try
        {
    //添加
    cmd.Transaction = dbTransation;//cmd是SqlCommand对象,换成你的变量试试
            dbTest.ExecuteNonQuery(dbCommand);
            ///执行完成就回滚
            dbTransation.Rollback();
            //直接在这回滚,但还是会保存数据
        } 
      

  4.   

    3楼正确,事务必须困绑在DBCOMMAND上面,这样才对这次执行起事务控制作用.
      

  5.   

    谢谢!
    Database dbTest;
    dbTest = DatabaseFactory.CreateDatabase(strConn);
    DbCommand dbCommand  = dbTest.GetSqlStringCommand("......");  
    using (DbConnection conn = dbTest.CreateConnection())
    {    
        conn.Open();
    DbTransaction dbTransation = conn.BeginTransaction(); 
    dbCommand.Transaction = dbTransation; // 加了这句
        try
        {
            dbTest.ExecuteNonQuery(dbCommand);
            ///执行完成就回滚
            dbTransation.Rollback();
            //直接在这回滚,但还是会保存数据
        }
        catch(Exception ex)
        {
            //这里会在执行的时候报 
    The transaction is either not associated with the current connection or has been completed
      

  6.   

    我加了
    dbCommand.Transaction = dbTransation; // 加了这句 
    在执行
    db.ExecuteNonQuery(dbCommand);
    出错,报
    The transaction is either not associated with the current connection or has been completed
      

  7.   

    db.ExecuteNonQuery(dbCommand,dbTransation);这样就没问题了