关于多进程和多线程访问Access的问题

12345_ 2006-10-12 02:41:10
1、多进程:
当多个程序同时连接到同一个mdb,并对它进行读写操作时,数据库经常就会坏掉,是什么原因?是不是数据库加锁失败了?有办法解决吗?

2、多线程:
如果同一个程序里同时打开多个线程来对Access进行读写操作,是不是也会存在上面的问题?很多网站都是用的Access数据库,当有很多用户同时读写数据的时候,是否会造成数据库崩溃?
...全文
2744 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2006-10-13
  • 打赏
  • 举报
回复
使用连接池,统一被外部程序调用,在连接池中可以控制最大连接数。

也有可能ADO.NET内部使用的是连接池,但用了C#这么长时间,没有发现ADO.NET的这个优点。

12345_ 2006-10-13
  • 打赏
  • 举报
回复
wangtiecheng(不知不为过,不学就是错!) 说的挺好!
根据你的说法,我的理解就是多进程访问和多线程访问一个mdb,其实是一样的,没有区别是不是?如果使用连接池,就相对稳定一些,但也不是绝对保险。
另外如果我通过一个组件来连接,多线程通过这个组件来访问数据库,并且我使用ADO.NET来连接数据库,ADO.NET默认使用的是连接池,这样子是不是就比较稳定了?
allright_flash 2006-10-13
  • 打赏
  • 举报
回复
1、多用户访问MDB时,稳定性不是很好。经常出问题,所以需要经常备份。
2、每个线程如果分别打开连接去访问,相当于多用户访问。这就是并发访问。
如果存在多个线程访问MDB,使用连接池处理会好些。
OracleRoob 2006-10-13
  • 打赏
  • 举报
回复

Access本身就支持多用户访问一个MDB,没有必要设置楼上说的锁定变量。

只是Access支持并发访问的健壮性有待改进而已。



按楼上所述,在一个外部应用程序中设定一个锁定状态,那多个不同的应用访问呢?这个变量应该放在哪儿?
不会是说把这个变量存到数据库中吧!

如果按这样做的话,就相当于只有一个连接的连接池,所有外部访问此MDB的应用程序,都通过此组件访问MDB。

l51 2006-10-13
  • 打赏
  • 举报
回复
Access數據庫文件讀寫鎖設計的基本思路:

設定一個 Application 變量為此數據庫的讀寫狀態,例如-1 是空閒狀態,0 是寫狀態,大於0的是目前正在讀取數據庫的會話數目。
這樣就好處理了,當數據庫沒有連接時,為空閒狀態;
當有 Connection 連接過來時為有讀取狀態,Application變量加1
當要對數據庫進行更新操作前,先檢查App 變量是否為0(為0則報錯、跳出或等待),
再保存 Application 變量,然後置這個App變量為0,接著更新數據庫,完成後恢復 App 變量為舊值。
當此App變量為0時,就是文件的寫保護鎖。

注意:更改 App 變量的值時,同樣要先 Lock 再 Unlock。
changechange 2006-10-13
  • 打赏
  • 举报
回复

1、多进程:
当多个程序同时连接到同一个mdb,并对它进行读写操作时,数据库经常就会坏掉,是什么原因?是不是数据库加锁失败了?有办法解决吗?

-------------------------

ACCESS为什么会提示自动修复自动备份?为什么会提示错误后自动关闭?如何保持 Jet 4.0 数据...
http://access911.net/index.asp?u1=a&u2=72FAB21E1ADCEFF3







--911--



2、多线程:
如果同一个程序里同时打开多个线程来对Access进行读写操作,是不是也会存在上面的问题?很多网站都是用的Access数据库,当有很多用户同时读写数据的时候,是否会造成数据库崩溃?


---------------------

关于 ASP 变量的生命周期,CONNECTION 关闭的问题《ASP/ASP.NET》
http://access911.net/index.asp?u1=a&u2=72FAB21E1ADCEDF3


ASP 程序员老犯得错误,都归咎在 JET 引擎或者 ACCESS 上,认真来看看吧




--911--












如果是 VC 无间隔多线程操作 MDB 会出现更新延迟问题,是 JET DB 引擎的问题无法解决
smartcatiboy 2006-10-12
  • 打赏
  • 举报
回复
烦人,低价空间只支持access
OracleRoob 2006-10-12
  • 打赏
  • 举报
回复

Access本身是单线程的。


楼主的意思是在外部程序中启动多个线程访问同一个MDB吧!

只要不使用独占方式打开,可以实现多个程序同时访问MDB。
wwwwb 2006-10-12
  • 打赏
  • 举报
回复
ACCESS是典型的单线程软件
用 ACCESS 本身不能修改自身线程,除非使用API ,但是那肯定不稳定,得不偿失。
另外,所谓的ACCESS线程不过是调用 MDB
l51 2006-10-12
  • 打赏
  • 举报
回复
Access數據庫本身就不支持多進程或多線程同時寫入,它的驅動程序根本就沒有這一塊的支持,多線程讀取也是勉強強行實現的,所以要寫它的多線程或多進程程序,你要自己管理文件讀寫鎖。
OracleRoob 2006-10-12
  • 打赏
  • 举报
回复

1、多进程:
当多个程序同时连接到同一个mdb,并对它进行读写操作时,数据库经常就会坏掉,是什么原因?是不是数据库加锁失败了?有办法解决吗?
----------------------------------------------
多用户访问MDB时,稳定性不是很好。经常出问题,所以需要经常备份。


2、多线程:
如果同一个程序里同时打开多个线程来对Access进行读写操作,是不是也会存在上面的问题?很多网站都是用的Access数据库,当有很多用户同时读写数据的时候,是否会造成数据库崩溃?
----------------------------------------------
每个线程如果分别打开连接去访问,相当于多用户访问。这就是并发访问。
如果存在多个线程访问MDB,使用连接池处理会好些。

7,730

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧