如果几个人同时用一个数据库,怎样保证并发操作的问题?比如,A读出数据库里的数据的时候,在A提交修改以前,我不希望B去更改数据库,类似一个“同步”或“锁定”的问题。怎么样解决呢?多谢!!

解决方案 »

  1.   

    Application.Lock();
    ……操作数据集……
    Application.UnLock();
      

  2.   

    如果是ASP.Net,在global.asa中!
      

  3.   

    可以用事务来满足你的要求,因为事务支持 ACID 特性!
      

  4.   

    hoge66,在global.asax文件中应该怎样设置啊?谢谢。
    morality,我也是觉得可以用事务来做,可是不知道怎样做,可以说详细点吗?谢谢。
      

  5.   

    create procedure testprocas begin transaction insert_Tran
      insert…………
     if (@@error <> 0)
     begin
       rollback tranasction insert_Tran
     end
     commit transaction insert_Trango
      

  6.   

    slhuang, 我觉得你给的这段程序不能达到我的目的啊。你的程序的意思是把你自己对数据库做的N件事情作为一个transaction,以保证你做的这N件事情要么全部成功,要么全部取消。而我需要的是对N个用户的并发操作的处理。
      

  7.   

    to 楼主,符合啊。用户最终还不是要对数据库进行操作?打个比方,A用户正在插入数据TABLE1,B用户正在从TABLE1查询数据,假设他们都是在同一个时间,那么B查到的数据是事务后的数据。就是插入后的数据(不管成功与否)。
      

  8.   

    slhuang,你好像还不太明白我的意思。这么说吧,A读了table1里的数据,然后就去基于这些数据做修改了。这时候,B去修改了table1里的数据,那么,此时table1里的数据其实跟A手里的数据已经不一样了。但是A并不知道,所以,A算完了以后就去往table1里写,这不就乱套了吗?
      

  9.   

    有个朋友告诉我两个办法,
    1.用select * for update 读取数据库
    2.用readonly打开连接,不知道可行吗?