我在VC中使用ODBC,ADO,DAO进行数据库开发时,有多个线程在对数据库进行操作,如果不加互斥是否会产生一个线程没有写完,别一个线程就读的情况,是否ODBC,ADO,DAO本来在内部就有这一个功能,我只是想得太多,那如果我要把几个操作合为一个事务又如何做。

解决方案 »

  1.   

    我想运用事务应该是比较安全的,因为操作如果出现异常,可以使用RollBackTrans取消这次事务,保证数据库信息的完整。具体用法如下
    TRY
    {
        pDBConnect->BeginTrans();
        ……
        pDBConnect->CommitTrans();
    }
    CATCH (_com_error& e)
    {
        AfxMessageBox(e.ErrorMessage());
        pDBConnect->RollbackTrans();
        return;
    }
    一旦事务处理中出现异常,异常处理处使用RollBackTrans取消这次事务,数据库回到BeginTrans以前的状态
      

  2.   

    我认为用事务还不能解决问题,
    比方说,数据库中有两个数据value1,value2,
    当线程1(或事务)修改了value1而来不及修改value2时,线程2就访问到了value1和value2,
    这样就就导致了读取脏数据,
    还可能有丢失修改和不可重复读的错误。
    因此,应该使用封锁协议(x锁和s锁 )
      

  3.   

    lyrzhlgq(笑天,笑地)说的如果是一次操作应该没有问题,如果是这样修改两个值是一个操作应当不会出现 Akagg(敬哥)的情况,我已前都加锁,但是感觉不加应当没有什么问题,前来问问,3天内完帖