FIREDAC FDConnection 连接池 连接串

一、FDConnection 连接池

http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=Defining_Connection.html

http://docwiki.embarcadero.com/RADStudio/XE8/en/Defining_Connection_%28FireDAC%29

 http://docwiki.embarcadero.com/RADStudio/Berlin/en/Multithreading_(FireDAC)

FDManager()->ConnectionDefs->ConnectionDefByName("")

FDManager.ConnectionDefs.ConnectionDefByName(cbDB.Text).Params.Pooled := True

oConn.ConnectionDefName;

FDConnection1->Params->Pooled;

$(FDHOME)\FDConnectionDefs.ini

D:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini

D:\Users\Public\Documents\Embarcadero\Studio\16.0\Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDConnection\Pooling

从这个官方例子看出使用连接池比不使用连接池的效率提高4倍。

 http://www.cnblogs.com/zhenfei/p/4105515.html

1)FDConnectionDefs.ini文件

[MSSQL_Demo]
DriverID=MSSQL
Server=127.0.0.1
Database=Northwind
User_Name=sa
Password=
MetaDefSchema=dbo
MetaDefCatalog=Northwind
ExtendedMetadata=True

以上代码存为FDConnectionDefs.ini文件放到当前exe目录下,程序会自己找到。小节名称与ConnectionDefByName参数一致。

this->FDManager1->ConnectionDefFileName = "FDConnectionDefs.ini";
this->FDManager1->ConnectionDefs->ConnectionDefByName("MSSQL_Demo")->Params->Pooled = true;

考虑到安全性,密码需要加密,所以建议用方法2或3。

2)代码动态创建IFDStanConnectionDef

uses
  FireDAC.Comp.Client, FireDAC.Stan.Intf;
var
  oDef: IFDStanConnectionDef;
begin
  oDef := FDManager.ConnectionDefs.AddConnectionDef;
  oDef.Name := 'MSSQL_Connection';
  oDef.DriverID := 'MSSQL';
  oDef.Server := '127.0.0.1';
  oDef.Database := 'Northwind';
  oDef.OSAuthent := True;
  oDef.MarkPersistent;
  oDef.Apply;
  .....................
  FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  FDConnection1.Connected := True;

3)连接参数

var
  oParams: TStrings;
begin
  oParams := TStringList.Create;
  oParams.Add('Server=127.0.0.1');
  oParams.Add('Database=Northwind');
  oParams.Add('OSAuthent=Yes');
  FDManager.AddConnectionDef('MSSQL_Connection', 'MSSQL', oParams);
  .....................
  FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  FDConnection1.Connected := True;

 c++  FDManager()->AddConnectionDef("", "", para);
其他
FDManager.ConnectionDefFileName := ExtractFilePath(Application.ExeName) + 'myconndef.ini';
FDManager.ConnectionDefFileAutoLoad := True;
oConn := TFDConnection.Create(nil);
oConn.ConnectionDefName := 'myconn';
oConn.Connected := True;

Create Connection def

void __fastcall TForm35::Button5Click(TObject *Sender)
{
    TStrings *para;
    para = new TStringList();
    para->Add("Server=192.168.1.1");
    para->Add("Database=db");
    para->Add("User_Name=sa");
    para->Add("Password=123");

    FDManager()->AddConnectionDef("sqlPTT", "MSSQL", para);

    FDConnection1->ConnectionDefName = "sqlPTT";
    Label1->Caption = this->FDConnection1->ResultConnectionDef->BuildString();
    delete para;

    int startTime = GetTickCount();
    for (int i = 0; i < 10; i++)
    {
        this->Button1->Click();
    }
    Caption = (GetTickCount() - startTime) / 1000.0;
}

use pool 

void __fastcall TForm35::Button1Click(TObject *Sender)
{
    TFDConnection *con;
    con = new TFDConnection(NULL);
    con->ConnectionDefName = FDConnection1->ConnectionDefName;

    TFDQuery *qry;
    qry = new TFDQuery(NULL);
    qry->Connection = con;
    qry->SQL->Text = "select count(*) from tt";
    qry->Open();
    con->Close();

    delete con;
    delete qry;

}

连接池比普通连接块4倍!

连接字符串ConnectString

mssql带端口号

Server={127.0.0.1,9433};User_Name=sa;;Password=123;Database=dbname;DriverID=MSSQL

Name=Unnamed;Database=mydb;User_Name=sa;Password=123;Server=127.0.0.1;DriverID=MSSQL

FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa;Password=123;';
Database=car;User_Name=sa;Password=;Server=127.0.0.1,9433;DriverID=MSSQL

mysql
Database=testdata;User_Name=root;Password=root;Server=127.0.0.1;DriverID=MySQL;CharacterSet=utf8

sqlite:
Database=D:\msdb.db;DriverID=SQLite

执行十条sql语句性能比较。
1、一个连接打开,不关闭,耗时0.184ms
2、使用连接池,耗时0.265ms
3、不使用连接池,0.71ms
 oracle连接字符串ip地址输入10.0.0.2:1521/orcl


  FDConnection1.Params.DriverID:='SQLite';
  FDConnection1.Params.Database := 'Demo.db';

以前ADO连接
ADOConstr = PromptDataSource(0, ADOConnection1->ConnectionString);

DBF连接串
Provider = Microsoft.Jet.OLEDB.4.0 ;Data Source ={0};Extended Properties=dBASE IV

SQLite连接字符串
Name=Unnamed;Database=E:\Bin\posdata.sqlite;DriverID=SQLite
MYSQL连接串
Name=Unnamed;Database=tData;User_Name=root;Password=root;Server=127.0.0.1;DriverID=MySQL;CharacterSet=utf8;Port=3306

ADO连接字符串

Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=mydb;Data Source=127.0.0.1

ADOExcel

 ADOConnectionExcel.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
                            EXLfilename+';Extended Properties=excel 8.0;'+
                            'Persist Security Info=false;'
                            ; 

--ORACLE
DriverID=Ora
Database=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) )  (CONNECT_DATA = (SERVICE_NAME = orcl)))
User_Name=DI_EHR
Password=neusoft
AuthMode=Normal
CharacterSet=UTF8

DB2
http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_IBM_DB2_Server_(FireDAC)

Use Cases

  • Connect to DB2 using the existing database alias:
DriverID=DB2
Alias=addemo
User_Name=db2admin
Password=mypwd
MetaDefSchema=db2admin
  • Connect to DB using full connection information:
DriverID=DB2
Server=127.0.0.1
Database=addemo
Port=50000
Protocol=TCPIP
User_Name=db2admin
Password=mypwd
MetaDefSchema=db2admin
 FireDAC EXCEL
FDConnection.Params.Clear;
FDConnection.Params.Add('Database=<myfile>');
FDConnection.Params.Add('ODBCDriver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}');
FDConnection.Params.Add('DriverID=ODBC');
FDConnection.Params.Add('ODBCAdvanced=HDR=No');
FDConnection.Open;
或者字符串
 'ODBCDriver={Driver do Microsoft Excel(*.xls)};Database=E:\2001aa.xls;DataSource=Excel Files;DriverID=ODBC'
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝈蝈(GuoGuo)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值