Delphi 的 TADOConnection 线程安全吗?

Posted

技术标签:

【中文标题】Delphi 的 TADOConnection 线程安全吗?【英文标题】:Is Delphi's TADOConnection thread-safe? 【发布时间】:2010-11-17 12:43:32 【问题描述】:

我正在编写一个 Delphi 7 应用程序,它需要同时从许多不同的线程访问同一个 SQL Server 数据库。

我可以使用单个共享的 TADOConnection,还是每个线程都必须创建自己的?

【问题讨论】:

【参考方案1】:

Blorgbeard,您必须创建、初始化并打开一个单独的 每个线程的 TAdoconnection 实例。

ADO 是一种基于 COM 的技术。它使用单元线程对象,不要忘记调用 CoInitialize(nil)。

procedure TMyThread.Execute;
begin
   CoInitialize(nil);
   try
     try
       // create a connection here
     except
     end;
   finally
     CoUnInitialize;
   end;
end;

【讨论】:

【参考方案2】:

不,不是。 ADO 是一种基于 COM 的技术。它使用单元线程对象,因此您不能跨线程边界使用 ADO 连接。每个线程都需要自己的连接。

【讨论】:

以上是关于Delphi 的 TADOConnection 线程安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

delphi通过TADOConnection组件直接连接MSSQL数据库并读写数据。

delphi线程

请问 Delphi 2010中怎么使用(安装)Sqlite数据库?

delphi 求教

在 Delphi 中使用 ADOConnection 查看“打印”语句的输出

delphi 线程教学第四节:多线程类的改进