读书人

求教。ADOConnection本身就支持多线程

发布时间: 2012-03-23 12:06:21 作者: rapoo

求教。ADOConnection本身就支持多线程吗
程序中用到了多线程查询数据库,每个线程有一个独立的 ADOQuery, 但ADOConnection只有一个。
ADOQuery.Connection:= MainFrom.ADOConnection;

不知道这样做有没有问题。

因为最近碰到一个奇怪的问题,线程中每隔一段时间就会查询一次数据库。
程序启动后,刚开始一直正常的。但一段时间后,线程中查询数据库的函数就会出错。
with ADOQuery do begin
Close;
SQL.Clear;
SQL.Add('select * from temp_table');
Open;// 这里出错。
end;

返回的错误信息我没截取下来。但这是不是因为多线程查数据库,而 ADOConnection没做多线程同步引起的?



[解决办法]
和ADOConnection没有关系
但线程中应该同步
[解决办法]
几个线程同时用一个ADOConnection会出错的,我以前也碰到过,我现在是建立多个connection,到现在还没出现问题
[解决办法]
你建立50个链接肯定对数据库了来说压力会很大,首先不管你做了什么样子的查询。
不知道你的业务状况是如何的?
[解决办法]
每个线程一个ADOConnection,每个线程中的ADOQuery都使用本线程的ADOConnection,这样就不会出问题,否则可能会导致应用程序崩溃。
[解决办法]
1个客户端就50个连接,肯定有问题的
[解决办法]
我也遇到过这种情况。

看楼主帖的资料
Data access components are thread-safe as long as each thread has its own database session component. The one exception to this is when you are using Access drivers. Access drivers are built using the Microsoft ADO library, which is not thread-safe.
是不是说明 除了access数据库,其他数据库都是线程安全的,如果是多线程对数据库进行操作,如果每个线程都有自己的session,那就是是安全的。但access即使是每个线程有自己的session,那也是不安全的?那这样的话,access岂不是没法用多线程了?我以前用多线程公用一个adoconnecton,临界保护每一个数据库操作,但还是会出现错误。
[解决办法]
access一个connection就够了。
线程同步用TCriticalSection,我用的好好的。
[解决办法]
关注
[解决办法]
用ADOCONNECTION应当可以公用,但是必须只有一个打开和关闭的操作,比如程序建立的时候打开,退出的时候关闭.线程的公用这个ADOCONNECTION,ADOQUERY不公用.说的不对请拍砖.
[解决办法]
我们公司是共用一个连接的,没出什么问题,不过具体怎么保护的,我还没搞懂,:)刚进公司!
[解决办法]
把CursotType设置成ctStatic
把CursorLocation改成clUseClient
LockType改成ltBatchOptimictic
试下

读书人网 >.NET

热点推荐