Node.js连接SQL Server报错:[SQL Server Native Client 11.0]TCP主机未知
问题场景
用Node.js连接SQL Server时触发网络连接错误,但相同的连接凭证在SQL Server Management Studio(SSMS)中可正常使用。
连接代码
const mssql = require('mssql/msnodesqlv8'); var config = { database : "chatbot", server : "LAPTOP-AR1H4E0R\SQLEXPRESS", driver:"msnodesqlv8", options:{ // "instanceName":"SQLEXPRESS" trustedConnection:true } }; mssql.connect(config, function(err) { if(err) { console.log("err", err) } else{ console.log("connected") } })
报错信息
ConnectionError: Error: [Microsoft][SQL Server Native Client 11.0]TCP Provider: 找不到指定的主机。
,Error: [Microsoft][SQL Server Native Client 11.0]登录超时已过期,Error: [Microsoft][SQL Server Native Client 11.0]建立到SQL Server的连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server已配置为允许远程连接。有关详细信息,请参阅SQL Server联机丛书。
at D:\Chatbot\agent-backend\node_modules\mssql\lib\msnodesqlv8\connection-pool.js:58:17
at Immediate. (D:\Chatbot\agent-backend\node_modules\msnodesqlv8\lib\connection.js:147:15)
at processImmediate (node:internal/timers:466:21) {
code: undefined
}
补充说明
SQL Server实例的连接凭证在SSMS中可正常使用,连接凭证截图如下:
解决办法
- 转义服务器名称中的反斜杠:JavaScript字符串里的反斜杠是转义字符,原代码中
server值的反斜杠会被解析错误,需改成双反斜杠:server : "LAPTOP-AR1H4E0R\\SQLEXPRESS" - 启用SQL Server的TCP/IP协议:打开SQL Server配置管理器,找到对应实例(SQLEXPRESS),在「SQL Server网络配置」里启用TCP/IP协议,之后重启SQL Server服务。
- 明确指定实例名称:取消
options中instanceName的注释,显式声明实例名:options:{ "instanceName":"SQLEXPRESS", trustedConnection:true } - 替换机器名为localhost:如果机器名解析存在问题,尝试用
localhost\\SQLEXPRESS作为server的值。
内容的提问来源于stack exchange,提问作者Deepak Mane

