M S*_*kel 6 delphi adoconnection
我创建了一个TCPip服务器应用程序.该应用程序有一个全局TADOConnection.此全局ado连接既用于主线程查询,也用于线程进程.
这个可以吗?ADOConnection是否内置了同时处理多个查询的机制?
我的应用程序可以在测试环境中找到(2-5个连接).但是在生产环境中部署时,我发现链接到ADOConnection的TADOQuery被设置为打开时,会出现"无法解释的"访问冲突.
我应该使用ADOConnection还是所有查询都应该自己建立与数据库的连接(这可能需要更多资源)?
小智 8
每个线程都需要有自己的连接对象.以下链接提供了更多信息:http://delphi.about.com/od/kbthread/a/query_threading.htm
文章中的一些要点:
1]在使用任何dbGo对象之前,必须手动调用CoInitialize和CoUninitialize.未能调用CoInitialize将导致"CoInitialize未被调用"异常.CoInitialize方法初始化当前线程上的COM库.ADO是COM.
2]您不能使用主线程(应用程序)中的TADOConnection对象.每个线程都需要创建自己的数据库连接.
@M Schenkel,看到这个问题是Delphi的TADOConnection线程安全吗?.每个线程都需要自己的连接,因为ADO是基于COM的技术,它使用单元线程对象.
看这个样本
procedure TMyThread.Execute;
begin
CoInitialize(nil);
try
try
// create a connection here
except
end;
finally
CoUnInitialize;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5530 次 |
| 最近记录: |