udatabasepool.pas

来自「数据库连接池。很重要很好的参考例子。全部源码」· PAS 代码 · 共 101 行

PAS
101
字号
unit uDataBasePool;

interface

uses
  Windows, Classes, SysUtils, DB, ADODB, uDIChatProctol, uCriticalSection,
  uADOConnectionPool;

type
  TDataBasePool = Class
  private
    ADOConnectionPool: TADOConnectionPool;
  private
    procedure ConfigDBConPool;
  public
    procedure SetMaxDBConn(value: WORD);
    function GetDataSet(sSQL: String): TADODataSet;
    function ExecSQL(sSQL: String): Boolean;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation
  
constructor TDataBasePool.Create;
begin
  inherited Create;
  ADOConnectionPool := TADOConnectionPool.Create(nil);
  ConfigDBConPool;
end;

destructor TDataBasePool.Destroy;
begin
  FreeAndNil(ADOConnectionPool);
  inherited Destroy;
end;

procedure TDataBasePool.SetMaxDBConn(value: WORD);
begin
  ADOConnectionPool.MaxConnections := value;
end;

procedure TDataBasePool.ConfigDBConPool;
begin
  ADOConnectionPool.ConnectionString :='FILE NAME='+ExtractFilePath(Paramstr(0))+'server.udl';
end;

function TDataBasePool.GetDataSet(sSQL: String): TADODataSet;
var
  Connection: TCustomConnection;
begin
  Result := TADODataSet.Create(nil);
  Connection := ADOConnectionPool.GetConnection;
  Result.Connection := TADOConnection(Connection);

  try
    Result.CommandText := sSQL;
    Result.Prepared := TRUE;
    Result.Open;
    ADOConnectionPool.FreeConnection(Connection);
  except
    on E: Exception do
    begin
      ADOConnectionPool.FreeConnection(Connection);
      Result.Close;
      FreeAndNil(Result);
      Result := nil;
    end;
  end;
end;

function TDataBasePool.ExecSQL(sSQL: String): Boolean;
var
  Connection: TCustomConnection;
  FQuery: TADOQuery;
begin
  FQuery := TADOQuery.Create(nil);
  Connection := ADOConnectionPool.GetConnection;
  FQuery.Connection := TADOConnection(Connection);

  try
    FQuery.SQL.Text := sSQL;
    FQuery.ExecSQL;
    Result := TRUE;
    ADOConnectionPool.FreeConnection(Connection);
  except
    on E: Exception do
    begin
      ADOConnectionPool.FreeConnection(Connection);
      FQuery.Close;
      FreeAndNil(FQuery);
      Result := FALSE;
    end;
  end;
end;


end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?