Windows10下Visual Studio 2021使用C++连接MSSQL Server失败求助
问题排查与解决步骤
1 SQL Server端配置校验
- 确认实例名正确:打开SQL Server配置管理器,查看SQL Server服务列表中的实例名是否为
MSSQLSERVER1,如果使用的是默认实例,连接字符串里的服务器地址直接写SERVER=LAPTOP-KD0SFV4F即可,不需要加实例名后缀 - 开启TCP/IP协议:在SQL Server配置管理器的「SQL Server网络配置」分类下,找到对应实例的协议设置,将TCP/IP调整为启用状态,修改后重启SQL Server服务生效
- 确认1433端口监听正常:进入TCP/IP属性的IP地址标签页,拉到最下方的IPAll配置项,将TCP端口设置为1433,重启服务后在cmd执行
netstat -ano | findstr 1433,确认有SQL Server进程在监听该端口 - 开启混合身份验证模式:打开SSMS连接到目标实例,右键实例进入属性页→安全性,选择SQL Server和Windows身份验证模式,修改后重启服务生效
- 校验账号权限:在SSMS的安全性→登录名列表中找到Tom账号,右键进入属性页,确认密码设置为Tom、账号未被禁用或过期,且该账号对
dbFotfChallenge数据库有访问权限 - 放行防火墙规则:在Windows Defender防火墙中添加入站规则,放行1433端口,或者直接将SQL Server运行程序加入允许通行列表
2 代码问题修正
现有代码中连接字符串的编码处理存在兼容问题,且使用了老旧的默认驱动,调整如下:
- 替换连接字符串驱动与编码格式,将
SQLDriverConnect传入的连接字符串改为:
(SQLWCHAR*)L"DRIVER={ODBC Driver 17 for SQL Server};SERVER=LAPTOP-KD0SFV4F\\MSSQLSERVER1,1433;DATABASE=dbFotfChallenge;UID=Tom;PWD=Tom;Trusted_Connection=no;"
旧的{SQL Server}驱动兼容性较差,新版ODBC驱动是官方推荐的连接方案,未安装的话直接搜索ODBC Driver for SQL Server下载官方安装包即可。
- 新增错误日志输出,方便定位具体问题,在连接失败的
case SQL_ERROR分支中添加以下代码:
SQLWCHAR sqlState[6], msg[SQL_RETURN_CODE_LEN]; SQLINTEGER nativeErr; SQLSMALLINT msgLen; SQLGetDiagRec(SQL_HANDLE_DBC, sqlConnHandle, 1, sqlState, &nativeErr, msg, SQL_RETURN_CODE_LEN, &msgLen); wcout << L"错误码:" << sqlState << L",错误信息:" << msg << endl;
运行后可直接看到是端口不通、账号错误还是实例不存在等具体原因,无需盲调。
3 快速验证方案
如果调整后仍连接失败,可先将连接字符串中的Trusted_Connection设为yes,删除UID和PWD字段,用当前Windows账号身份登录测试,能正常连接的话说明是Tom账号的配置问题。
内容的提问来源于stack exchange,提问作者programmeurNED
相关产品推荐
相关产品推荐

