gpt4 book ai didi

delphi - TADo连接和池化

转载 作者:行者123 更新时间:2023-12-03 15:44:15 26 4
gpt4 key购买 nike

我正在处理所有使用多个线程访问 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/

26 4 0