在Delphi中使用连接池连接MSSQL数据库和不使用连接池连接数据库的有什么区别

news/2025/11/5 17:05:29/文章来源:https://www.cnblogs.com/karkash/p/19194199

以下是完整的Delphi数据库连接池实现代码,包含初始化、连接获取和使用示例:

 

1. 连接池初始化单元 (uDBPool.pas)

 

unit uDBPool;interfaceusesFireDAC.Comp.Client, FireDAC.Stan.Def;procedure InitConnectionPool;
function GetConnectionFromPool: TFDConnection;
procedure ReleaseConnection(var AConnection: TFDConnection);implementationusesFireDAC.Phys.MSSQL;procedure InitConnectionPool;
beginFDManager.Close;FDManager.ConnectionDefs.Clear;FDManager.AddConnectionDef('MSSQL_Pool', 'MSSQL','DriverID=MSSQL;' +'Server=192.168.1.100,1433;' +'Database=MyDB;' +'User_Name=sa;' +'Password=123456;' +'Pooled=True;' +'POOL_MaxSize=20;' +'POOL_ExpireTimeout=30000;' +'LoginTimeout=3;' +'Mars=Yes');FDManager.Active := True;
end;function GetConnectionFromPool: TFDConnection;
beginResult := TFDConnection.Create(nil);tryResult.ConnectionDefName := 'MSSQL_Pool';Result.LoginPrompt := False;Result.ResourceOptions.AutoReconnect := True;Result.FetchOptions.Mode := fmAutomatic;Result.FetchOptions.AutoClose := True;Result.Open;exceptFreeAndNil(Result);raise;end;
end;procedure ReleaseConnection(var AConnection: TFDConnection);
beginif Assigned(AConnection) thenbeginif AConnection.Connected thenAConnection.Close;FreeAndNil(AConnection);end;
end;end.

 

2. 使用示例单元 (uMainForm.pas)

 

unit uMainForm;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,FireDAC.Comp.Client, Vcl.StdCtrls;typeTfrmMain = class(TForm)btnQuery: TButton;procedure FormCreate(Sender: TObject);procedure btnQueryClick(Sender: TObject);procedure FormDestroy(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varfrmMain: TfrmMain;implementation{$R *.dfm}uses uDBPool;procedure TfrmMain.FormCreate(Sender: TObject);
beginInitConnectionPool;
end;procedure TfrmMain.btnQueryClick(Sender: TObject);
varConn: TFDConnection;Query: TFDQuery;
beginConn := GetConnectionFromPool;tryQuery := TFDQuery.Create(nil);tryQuery.Connection := Conn;Query.SQL.Text := 'SELECT TOP 10 * FROM Customers';Query.Open;while not Query.Eof dobeginShowMessage(Query.FieldByName('CompanyName').AsString);Query.Next;end;finallyQuery.Free;end;finallyReleaseConnection(Conn);end;
end;procedure TfrmMain.FormDestroy(Sender: TObject);
beginFDManager.Close;
end;end.

 

3. 直接连接版本 (非池化)

 

unit uDirectDB;interfacefunction GetDirectConnection: TFDConnection;
procedure ReleaseDirectConnection(var AConnection: TFDConnection);implementationfunction GetDirectConnection: TFDConnection;
beginResult := TFDConnection.Create(nil);trywith Result.Params dobeginAdd('DriverID=MSSQL');Add('Server=192.168.1.100,1433');Add('Database=MyDB');Add('User_Name=sa');Add('Password=123456');Add('Pooled=False');Add('LoginTimeout=3');end;Result.LoginPrompt := False;Result.Open;exceptFreeAndNil(Result);raise;end;
end;procedure ReleaseDirectConnection(var AConnection: TFDConnection);
beginif Assigned(AConnection) thenbeginif AConnection.Connected thenAConnection.Close;FreeAndNil(AConnection);end;
end;end.

 

4. 项目文件 (Project1.dpr)

 

program Project1;usesVcl.Forms,uMainForm in 'uMainForm.pas' {frmMain},uDBPool in 'uDBPool.pas',uDirectDB in 'uDirectDB.pas';{$R *.res}beginApplication.Initialize;Application.MainFormOnTaskbar := True;Application.CreateForm(TfrmMain, frmMain);Application.Run;
end.

 

关键功能说明

 

  1. 连接池管理
    • 自动维护连接生命周期
    • 支持最大20个连接
    • 30秒空闲超时
  2. 异常安全
    • 所有资源都有try-finally保护
    • 连接失败时自动释放资源
  3. 使用建议
    • 主窗体创建时初始化连接池
    • 每次查询获取新连接
    • 操作完成后立即释放
  4. 性能优化
    • 启用MARS(多活动结果集)
    • 自动重连机制
    • 智能数据获取模式

 

这套实现可以直接集成到现有Delphi项目中,只需修改连接字符串参数即可使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go红队开发—图形化界面

Go红队开发—Gui图形化界面(Fyne库)目录GUi 图形化配置第一个GUI常用 widget 组件Layout 布局绝对布局dialog弹框注意事项类别案例demo所有代码 好久没做golang开发了,之前的文章一直在做cli的安全工具开发,这里了解…

使用FireDAC的TFDManager和TFDConnection组件实现运行时动态数据库连接

以下是一个通用的数据库连接方案,使用FireDAC的TFDManager和TFDConnection组件实现运行时动态数据库连接。支持多种数据库类型,采用面向对象封装:unit DatabaseManager;interfaceusesSystem.SysUtils, System.Class…

laas paas saas 架构说明

--------------------------------------------------------------------------------------------------------------------------- 在 Java 开发领域,IaaS、PaaS、SaaS 分别对应基础设施、平台、软件三个层级的服务…

Delphi RESTful API

服务器 第一步: 创建Delphi REST服务器(使用WebBroker或DataSnap,这里使用WebBroker)在 Delphi 中创建 "Stand-alone Web Server Application" 将 API 代码粘贴到 WebModule 中 设置端口(默认为 8080)…

TFDMemTable 是断开性数据集

TFDMemTable 是断开性数据集,数据存储在内存中,无需实时连接数据库它适用于缓存数据、离线操作、临时数据处理等场景 虽然 TFDMemTable 是断开性的,但它仍然可以通过 TFDQuery 等组件与数据库进行数据交互

2025年河南公共走廊全钢防火隔断公司权威推荐榜单:商场全钢防火隔断/公共走廊防火隔断/公共走廊防火隔墙源头厂家精选

在商业建筑、学校、医院等公共空间,全钢防火隔断作为保障人员安全疏散的关键设施,其防火性能与结构稳定性直接关系到生命财产安全。根据建筑防火行业统计,2025年国内防火建材市场规模预计突破800亿元,其中全钢防火…

2025年板式换热机组制造厂权威推荐榜单:容积式换热机组/热力机组/换热机组源头厂家精选

在工业节能改造与区域能源管理加速推进的背景下,板式换热机组凭借其高效传热、紧凑结构及智能控制等优势,已成为区域供暖、化工流程及建筑能源系统的核心装备。根据行业数据统计,2025年国内换热机组市场规模预计突破…

十四.JavaScript 简介及导入方式

十四.JavaScript 简介及导入方式 定义:JS导入方式:有两种 显示:Fn+F12-->Console内联(script)外联:创建.js文件-导入.js文件基本输入输出: 打印到控制窗口:console.log() 显示到下拉框:alert() 十五.Java…

2025 年 11 月音乐喷泉工程,景区互动音乐喷泉,彩色灯光音乐喷泉厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!

引言 近期,专业景观行业协会针对音乐喷泉工程、景区互动音乐喷泉、彩色灯光音乐喷泉领域开展了 2025 年度厂家测评工作,本次测评覆盖行业内百余家主流企业,通过资质审核、技术实力评估、项目案例考察、售后服务调研…

11.5 NOIP 模拟赛 T1. 荣耀

思路 \(f(n)\): \(n\) 个位置中 \(0\) 号勋章出现偶数次的方案数 \(g(n)\): \(n\) 个位置中 \(0\) 号勋章出现奇数次的方案数 \[f(n) = m \cdot f(n-1) + g(n-1) \\ g(n) = f(n-1) + m \cdot g(n-1) \]可以 \[\begin{b…

智能体自动化 ui 测试

智能体自动化 ui 测试

Windows开机自动播放视频设置

打开计划任务程序 有两种方法打开输入命令 运行输入taskschd.msc开始菜单 Windows管理工具-计划任务程序设置开机任务 创建任务设置任务名称设置触发器 需设置延迟任务时间否则可能开机页面闪一下但是不启动设置操作启…

快速创建模拟 REST API

JSON Server 是一个用于快速创建模拟 REST API 的工具,主要用在前端开发和原型设计中。 主要特点 零编码:只需一个 JSON 文件即可创建完整的 API RESTful:自动提供完整的 REST API 端点 真实 HTTP:使用真实的 HTTP…

CSS简介及导入方式

简介:css语法:选择器放在head中间 CSS三种导入方式:九、CSS选择器 定义、类型:1-4:5-6:7-8:伪元素选择器 十、CSS常用属性 font:字体的复合属性 line-height:行高 行内块元素:十一、盒子模型 概念:实现:十二…

2025 年 11 月倍捻机,直捻机,大卷装倍捻机厂家最新推荐,实力品牌深度解析采购无忧之选!

引言 近期,行业权威协会针对倍捻机、直捻机、大卷装倍捻机领域开展了全面测评,测评覆盖近 50 家主流厂家,从技术参数、生产稳定性、节能表现、售后服务等 12 项核心指标进行量化打分,最终筛选出综合实力突出的品牌…

皮试

皮试结果

使用rsync及inotify实现两台Linux设备间的文件夹同步

一、背景 环境 由于业务需要,软件需要在CentOS 6.10 32位环境中进行编译。由于系统版本较老,无法实现使用vscode远程连接到CentOS上进行软件开发。为了仍能享受到vscode的便利,现借助SUSE作为vscode远程连接的开发环…

教育部等七部门关于加强中小学科技教育的意见-解读

这份《教育部等七部门关于加强中小学科技教育的意见》(教基〔2025〕7号)是国家层面推动中小学科技教育系统化、高质量发展的纲领性文件,体现了国家对科技创新人才培养的高度重视和战略布局。作为青少年编程教育科技…

2025年酒柜定制厂排名:酒柜定制选择哪家好?

葡萄酒收藏已从小众爱好演变为彰显品味的生活方式,而专业酒柜则是守护美酒价值的核心载体。面对市场上良莠不齐的酒柜定制服务,如何找到真正靠谱的酒柜定制厂?本文基于行业调研与用户反馈,精选2025年十大酒柜定制厂…

2025 年 11 月智能倍捻机,节能倍捻机,高速大卷装倍捻机厂家最新推荐,实力品牌深度解析采购无忧之选!

引言 当前纺机行业对智能倍捻机、节能倍捻机、高速大卷装倍捻机的需求持续攀升,为帮助企业精准选择优质设备,行业权威协会开展专项测评,从技术参数、生产效率、能耗表现、售后服务等 8 大维度,对 50 余家厂家的设备…