好象都在考虑并发问题
1.Access数据库中怎样锁定,用什么语句?是锁定整个表还是锁定某一行记录?
2.在SQL数据库中怎样锁定,用什么语句?是锁定整个表还是锁定某一行记录?我在测试时Access数据库好像是锁定的整个表,我什么都没做怎么会锁定了呢?
既使只是Select 也会自动的锁定,关闭链接后自动的解锁,没有更新数据却锁定表
这不是太浪费了吗,怎么办?还有,在做象论坛这样的网站大家的数据库链接都是怎么做的啊?
我是每个用户每打开一个页面都去链接并打开数据库,读出后马上关闭链接.有
什么更好的方法吗?

解决方案 »

  1.   

    access一般是锁整个库。占用模式。sqlserver 的锁模式较多.http://blog.csdn.net/cuijian_ok/archive/2005/03/17/322397.aspx
    ------说错了莫怪。
      

  2.   

    cpp2017(幕白兄)
     谢谢了!SQL的方法我知道了,不过access呢?锁整个库怎么锁?又怎么解?
      

  3.   

    Access根本没有锁可言,一旦并发写入就有潜在的破坏性写入危险。
      

  4.   

    打开access数据库的时候,你要制定是“独占”还是“共享”,默认是“独占”方式,此时数据库不能用于多用户连接。access即使在多用户共享时,也很好地支持Transaction。能够支持事务的嵌入式数据库其实不多见。而access数据库(以及其Jet引擎)在十年前用于VB3.0的时候就完美支持事务了。Access与SQL Server一样,锁是在你Begin Transaction的时候自动加上的,当它Commit或者Rollback的时候自动解锁。不像某些原始的数据库那样要用代码Lock函数来锁某些数据。实际上,事务并不是锁数据这么简单,它还要处理数据的日志版本等。锁仅仅是事务中的一个小功能,事务中往往有多种加锁策略,另外当Commit的时候如果数据库宕机了,那么重新加电启动数据库之后往往可以重新提交确保数据库Commit成功,当没有Commit的时候如果发生严重故障,数据库重新启动之后要可靠地回滚。Access默认是按照“页面”加锁,SQL Server是按照“行”加锁。因此Access比SQL Server要更容易遇到“冲突”的情况。不过Access运行起来往往很快,使针对嵌入式数据库的概念管理数据的,所以这个问题也不是很大。很大的问题是,Access不具有上面说的“数据库宕机之后的自动处理”功能(很奇怪这个本来很容易做到),结果当进程强行中断之后(例如客户端电脑的电源被碰掉),执行修复数据库功能往往会“丢弃”被加锁的页面从而丢失了几条、十几条记录。
      

  5.   

    SQL Server是任何数据库操作都默认使用事务保护的,不管你是否在代码中启动 Transaction。Access则需要你在代码中启动Transaction,并不自动启用事务。因此,如果你不知道或者不小心忘记了需要启动Transaction,你对Access数据库的读写就是没有任何保障的。
      

  6.   

    ADO.Net中SQL Server引擎驱动有连接池功能,所以我们说“尽早关闭连接”。但是Access没有连接池(好像是这样),所以应该自己写或者找一个Access连接池工具(不超过70行代码就可以很完善)。无论如何,不应该关闭对数据库的物理连接。http://community.csdn.net/Expert/TopicView.asp?id=5278824