数据库并发访问问题,高手请进
同一个access数据库 ,现在有两个进程访问,一个只读进程1,一个可写进程2,请问如果进程1访问时遇上进程2正在写(写时是锁定了吧,是独占的),那么进程1会出错吗?如果出错我该如何处理才可使程序仍然能正确运行?
我现在就两个程序都要访问该数据库,经常出错,不知道怎么处理好
有经验的大侠们帮说说有啥解决办法,可以避免错误,保证正确运行那
------解决方案--------------------进程之间的互斥操作你最好先看看“pv信号量”。
------解决方案--------------------mark.帮顶。
------解决方案--------------------帮顶~
------解决方案--------------------up
------解决方案--------------------access的并发性不好,写得时候可能把文件锁死了,另一个进程读就会失败
首先要使用事务保证写的进程不能有死锁
在就是读的时候使用dataset等离线数据源,不要用datareader这样保持连接的方法访问数据库
在读的时候如果失败,可以进行等待,多次尝试失败后再抛出
看看这样是否能减少错误
------解决方案--------------------try
catch
不就完了
------解决方案--------------------问的是不是 ASP.NET 的问题呀?
如果进程1访问时遇上进程2正在写(写时是锁定了吧,是独占的),那么会不会出错,要看进程2是怎么设置并发的!ASP.NET2.0 默认是开放式锁定,在写的时候是允许读的。
如果是保守锁定,就不允许别的进程读/写,再有一个进程要读或改写就会报错。但是 ASP.NET2.0 没有支持保守锁定。
ASP.NET 还有一种“后进先写入(Last In Wins)”并发控制选择,就是数据在更新时,不允许别的进程写入,在更新期间别的进程改些了记录,就会报错。
------解决方案--------------------這關系到進程的操作﹐互斥﹐作業的問題有關的pv信号量﹐這些應該找操作系統來看一看。這樣實現有點難在ASP.net中﹗沒有試過
學習﹗
------解决方案--------------------和谁连接数据库没有关系,锁定和并发控制是数据库的事情。
另:“這關系到進程的操作﹐互斥﹐作業的問題有關的pv信号量”扯不到这么远吧!只是在一个应用(数据库)中。
------解决方案--------------------一般来说问题不大。
个人认为可以将写操作使用同一个函数。
在函数体内加个lock,这样可以起到一个简单的防护作用。
具体的方案可以使用线程,不过在ASP.NET中使用线程有些大题小做了。
要不然就用事务,这个是一个有效的解决方案。
ACCESS里面也可以使用事务的。
------解决方案--------------------要不然就用事务,这个是一个有效的解决方案。
ACCESS里面也可以使用事务的。
同意这个。。