使用Unidac內置連接池


第一步:

   放一個TUniconnection並設置相關屬性

之后直接使用TUniconnection對象即可

 

跟蹤unidac源碼uni單元1540行中可以看到

Connect方法調用CreateIConnection

 

procedure TUniConnection.CreateIConnection;
var
  Connection: TCRConnection;
  ConnectionParameters: TCRConnectionParameters;

  procedure SetSpecificObjectProps(SetAllProps: boolean);
  begin
    FProvider.SetObjectProps(Connection, FSpecificOptions.Values, SetAllProps);
    FSpecificOptions.IsModified := False;
  end;

begin
  CheckProvider;

  Connection := FIConnection;

  if Connection = nil then begin
    if Pooling and FProvider.IsPoolingSupported then begin
      ConnectionParameters := FProvider.GetConnectionParametersClass.Create;
      try
        ConnectionParameters.MinPoolSize := PoolingOptions.MinPoolSize;
        ConnectionParameters.MaxPoolSize := PoolingOptions.MaxPoolSize;
        ConnectionParameters.ConnectionLifeTime := PoolingOptions.ConnectionLifetime;
        ConnectionParameters.Validate := PoolingOptions.Validate;
        ConnectionParameters.Username := Username;
        ConnectionParameters.Password := Password;
        ConnectionParameters.Server := Server;
        ConnectionParameters.IOHandler := FIOHandler;
        ConnectionParameters.OnError := DoError;
        if FProvider.IsDatabaseSupported then //upd1
          ConnectionParameters.SetProp(prDatabase, FDatabase);
        if FProvider.IsPortSupported then
          ConnectionParameters.SetProp(prPort, Port);

        FProvider.SetObjectProps(ConnectionParameters, SpecificOptions, True);

        Connection := FProvider.GetConnectionPoolingManagerClass.GetConnection(
          ConnectionParameters, TUniSQLMonitor);
      finally
        ConnectionParameters.Free;
      end;
    end
    else begin
      Connection := GetIConnectionClass.Create;
      Connection.IOHandler := FIOHandler;
      if FProvider.IsDatabaseSupported then
        Connection.SetProp(prDatabase, FDatabase);
      if FProvider.IsPortSupported then
        Connection.SetProp(prPort, Port);
    end;

    Connection.SetProp(prDisconnectedMode, Options.DisconnectedMode);
    Connection.SetProp(prEnableBCD, Options.EnableBCD);
  {$IFDEF VER6P}
  {$IFNDEF FPC}
    Connection.SetProp(prEnableFMTBCD, Options.EnableFMTBCD);
  {$ENDIF}
  {$ENDIF}
    Connection.SetProp(prDefaultSortType, Variant(Options.DefaultSortType));
    // if connection is just created we need to set all options
    SetSpecificObjectProps(True);

    SetIConnection(Connection);
  end;

  if FSpecificOptions.IsModified then
    SetSpecificObjectProps(False);
end;

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM