在开发Datasnap三层中,使用FireDac 连接 MSSQL数据库。
实现过程如下:
1、在ServerMethods 单元中放入 FDManager、FDPhysMSSQLDriverLink1、FDGUIxWaitCursor1等控件。
2、自定义过程:
private var oParams: TStrings;
procedure TSrvMethods.SetupFDManager; //加载数据库链接信息。 begin //*****初始化***** oParams := TStringList.Create; //********* 连接池 oParams.Add('DriverID=MSSQL'); //oParams.Add('CharacterSet=utf8'); oParams.Add('Server=192.168.1.199'); //oParams.Add('Port=3306'); oParams.Add('Database=DSCSYS'); oParams.Add('User_Name=sa'); oParams.Add('Password='); // 毫秒 oParams.Add('POOL_CleanupTimeout=36000'); // 毫秒 oParams.Add('POOL_ExpireTimeout=600000'); //最多连接数 oParams.Add('POOL_MaximumItems=60'); oParams.Add('Pooled=True'); //******* FDManager.Close; FDManager.AddConnectionDef('MSSQL_DSCSYS', 'MSSQL', oParams); try FDManager.Active := True; except on E: Exception do begin frmMain.Log.Error(e.Message, 'Error'); end; end; end;
3、在 Create 事件中:
procedure TSrvMethods.DSServerModuleCreate(Sender: TObject); begin SetupFDManager; // 加载数据库链接 end;
4、在查询使用中,动态生成FDConnection,设置Connected为true 就是 从连接池中取一个连接;具体代码如下
function TSrvMethods.QueryData(SQLStr: string): string; var fdqry1: TFDQuery; mConn: TFDConnection; begin try //***动态创建,用完释放; mConn := TFDConnection.Create(nil); mConn.ConnectionDefName := 'MSSQL_Conn'; mConn.Connected := true; fdqry1 := TFDQuery.Create(nil); try fdqry1.Close; fdqry1.Connection := mConn; fdqry1.SQL.Clear; fdqry1.SQL.Add(SQLStr); fdqry1.Open(); result := '{result:"OK",DataSet:}'; frmMain.Log.Debug('ok', 'debug'); finally fdqry1.Free; mConn.Free; end; except on E: Exception do begin result := '{Result:"失败 Error:' + e.message + '"}'; frmMain.Log.Debug('NOok', 'debug'); end; end; end;
5、在关闭时候,释放创建的对象
procedure TSrvMethods.DSServerModuleDestroy(Sender: TObject); begin oParams.Free; end;
来源:https://www.cnblogs.com/redhat588/p/12331772.html