使用Qt开发且通过SSMS Express连接数据库的程序如何部署?
Qt + SQL Server Express 应用部署方案
部署前首先明确你的使用场景,分两种方案选择:
前置依赖校验
- 确认Qt项目使用的SQL Server驱动正常:Qt连接SQL Server默认依赖
QODBC驱动,打包程序时需要将对应版本的qsqlodbc.dll(release版)/qsqlodbcd.dll(debug版)放到程序根目录的sqldrivers文件夹下,同时不要漏了Qt核心依赖库 - 确认程序位数和ODBC驱动位数一致:32位程序必须搭配32位SQL Server ODBC驱动,64位程序搭配64位驱动,否则会出现驱动找不到的报错
方案1:单机本地部署(每个用户单独使用本地数据库)
适合不需要多端数据同步的场景:
- 将对应版本的SQL Server Express静默安装包打入你的程序安装包,安装时自动执行静默安装,配置参数固定自定义实例名(比如
MYAPP_SQLEXPRESS)、启用本地TCP/IP连接、开启混合身份验证或Windows身份验证 - 数据库初始化两种可选方式:
- 安装程序在SQL Server部署完成后,调用
sqlcmd命令自动将你预制的.mdf/.ldf数据库文件附加到本地实例 - 程序首次启动时自动检测数据库是否存在,不存在则通过
QSqlQuery执行建库、建表语句完成初始化
- 安装程序在SQL Server部署完成后,调用
- 连接字符串建议写在程序目录的可配置ini文件中,本地连接参考示例:
Driver={SQL Server};Server=localhost\\MYAPP_SQLEXPRESS;Database=你的数据库名;Trusted_Connection=Yes; - 注意不要把数据库文件存放在Program Files等需要管理员权限的目录,建议放在ProgramData或用户文档目录下,避免普通用户运行时无写入权限
方案2:共享数据库部署(所有客户端访问同一台服务器的数据库)
适合多端数据同步的场景:
服务器端配置
- 打开SQL Server配置管理器,启用对应实例的TCP/IP协议,设置固定访问端口(默认1433,也可自定义)
- 将SQL Server身份验证模式改为混合模式,创建程序专用的数据库访问账号,仅分配必要的读写权限,不要直接使用sa账号
- 服务器防火墙开放SQL Server对应端口的入站规则,允许客户端IP段访问
客户端配置
- 客户端程序不需要打包SQL Server安装包,仅需要确保目标系统安装了对应版本的SQL Server ODBC驱动(Windows 10及以上系统默认自带兼容驱动,老版本系统可打包ODBC驱动静默安装包随程序安装)
- 连接字符串参考示例:
Driver={SQL Server};Server=服务器IP\\SQLEXPRESS,端口号;Database=你的数据库名;Uid=专用账号;Pwd=账号密码;
建议将连接字符串放在可配置文件中,方便部署时修改服务器地址和认证信息
通用排障提示
- 出现连接失败时优先检查目标机器的防火墙是否拦截了SQL Server连接,其次检查实例名、端口、账号密码是否正确
- 如果用Qt6,注意额外打包
Qt6Sql.dll、Qt6Core.dll等对应版本的核心依赖库
内容的提问来源于stack exchange,提问作者Seyed Mohsen Falsafi
相关产品推荐
相关产品推荐

