delphi - TADo连接和池化

标签 delphi

我正在处理所有使用多个线程访问 sql server 2005 数据库的应用程序,我当前通过设置 TADOQuery 对象的连接字符串属性来使用隐式连接,但这似乎打开了很多到数据库。我们需要减少单个实例保持打开的连接数量,所以

  1. tadoconnection 库中是否有任何类型的连接池可用,以及如何启用它并设置它的限制。
  2. 如果不是,那么减少和重用数据库连接的推荐方法是什么,以便应用程序能够很好地扩展。

我很感激任何意见或想法..

非常感谢

最佳答案

连接数量增加的另一个原因是同一连接上有多个处于事件状态的打开查询。

假设你有这样的代码

db := TAdoConnection.Create()
qry1 := TAdoQuery.Create();
qry2 := TAdoQuery.Create();

qry1.connection := db;
qry2.connection := db;

qry1.SQL.Text := 'select * from whatever';

qry1.open;
while not qry1.eof do
begin
  x := qry1.fieldbyname('fld').AsString;
  qry2.SQL.Text := 'select * from elsewhere where SomeField='+ QuotedStr(x);
  qry2.Open;
  ..do something..
  qry2.Close;

  qry1.Next;
end;

qry2.Open() 将导致创建另一个未池化的连接

如果您有这样的代码,请将 qry1 的结果存储到本地,然后执行 qry2 的工作。在这种情况下,您将仅维护一个连接。

粗略地说,这看起来更像是:

db := TAdoConnection.Create()
qry1 := TAdoQuery.Create();
qry2 := TAdoQuery.Create();
str := TStringList.Create();

qry1.connection := db;
qry2.connection := db;

qry1.SQL.Text := 'select * from whatever';

qry1.open;
while not qry1.eof do
begin
  x := qry1.fieldbyname('fld').AsString;
  str.Add(x);
  qry1.Next;
end;
qry1.Close;

for i := 0 to str.Count-1 do
begin
  qry2.SQL.Text := 'select * from elsewhere where SomeField='+ QuotedStr(str[i]);
  qry2.Open;
  ..do something..
  qry2.Close;
end

关于delphi - TADo连接和池化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878403/

相关文章:

delphi - 如何使用 Delphi 对字符串进行哈希处理?

delphi - 有人有将 D2007 + TntControls 应用程序移植到 D2009 的经验吗?

delphi - 如何使用Delphi隐藏WS_SIZEBOX创建的边框?

Delphi 2010 密码学库

forms - 在表单编辑器中调整字体大小后调整 Delphi 表单的大小

delphi - Firemonkey 表单 - 当最大化按钮关闭时主菜单消失

ios - 如何禁用 iOS 上的启动画面?

delphi - 无效的指针操作,调试时请求建议

Delphi Indy IdUdpClient读取操作,无数据返回

delphi - DNS地址设置问题