MS SQL forbindelse: Connection Pooling problem
HejJeg har problemer med at få Connection Pooling til at fungere.
Jeg bruger OLE DB til at skabe forbindelse til MS SQL fra Delphi.
Bemærk at det virker på windows 2000. Problemet findes kun på på windows XP, men både på SP1 og SP2.
Her følger et kode eksempel der illustrerer problemet:
------------------
Jeg opretter en form med:
Connection1: TADOConnection;
Table1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
og skriver følgende kode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Active:=not Table1.Active;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
for i:=0 to 9 do
Button1Click(nil);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Connection1.Connected:=true;
end;
Min connection string ser således ud:
Provider=SQLOLEDB.1;
Password=MyPassword;
Persist Security Info=False;
User ID=MyUID;
Initial Catalog=MyCat;
Data Source=MyDB;
Network Library=DBMSSOCN;
Use Procedure for Prepare=1;
Auto Translate=True;
Packet Size=4096;
Workstation ID=MyPC;
Use Encryption for Data=False;
Tag with column collation when possible=False
------------------
Med denne kode oprettes en forbinldelse via tcp/ip, og den opbevares i connection poolen. Mit problem er at den ikke genbruges.
Når jeg lukker table (men ikke connection) går tcp/ip porten i "TIME_WAIT" mode. Det burde den så vidt jeg ved ikke gøre, for TIME_WAIT mode bruges til at vente på at al igangværende trafik er afsluttet før porten kan genbruges (af fx en anden applikation).
Jeg bruger "Active Ports" (http://www.tucows.com/preview/213738.html) til at overvåge mine tcp/ip porte. Med dette værktøj er problemet let synligt med min lille demo ovenfor.
Jeg kører Delphi 7 på
Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
MDAC version 2.8
