无法连接到 SQL 服务器 Node.js 和 Tedious
Cannot connect to SQL Server with Node.js and Tedious
当我尝试使用 Node.js 和 Tediious 连接到本地 SQL 服务器实例时,出现此错误:
{ [ConnectionError: Failed to connect to XXXXX:1433 - connect ECONNREFUSED]
name: 'ConnectionError',
message: 'Failed to connect to XXXXX:1433 - connect ECONNREFUSED',
code: 'ESOCKET' }
这是我的连接对象:
var config = {
userName: 'username',
password: 'password',
server: 'XXXXX',
options: {
database: 'databasename',
instancename: 'SQLEXPRESS'
}
};
我已检查并根据配置管理器在端口 1443 上启用并广播了 TCP/IP。 SQL Server Browser 服务也是 运行,如果不是,我读到它可能会导致此类问题。我已经禁用了我的防病毒软件和防火墙,但也没有帮助。
有什么见解吗?
所以我猜测发生的是,即使 Tedious 允许您在 'options' 中包含实例名称,它要么不使用它,要么不能使用它,因为它需要使用。在做了一些研究之后,应该发生的是当你给 SQL 服务器实例名称时,它会将你从端口 1433 重定向到它用于该实例的动态端口。我不知道它使用的是动态端口,但如果您的实例被命名,则端口将始终是动态的。 1433不知道在哪看到的,是我看错了
要检查动态端口,请看这里:
根据这些信息,我将代码更改为:
var config = {
userName: 'username',
password: 'password',
server: 'XXXXX',
options: {
port: 49175,
database: 'databasename',
instancename: 'SQLEXPRESS'
}
};
现在一切都很好,希望这对某人有所帮助。
如果启用TCP/IP协议后仍然有问题,我建议您检查SQL Server Browser Service is 运行ning。就我而言,我花了很多时间才意识到它不是 运行ning。
这个配置运行适合我:
var config = {
user: 'user',
password: 'userPwd',
server: 'localhost',
database: 'myDatabase',
options: {
truestedConnection: true,
instanceName: 'SQLEXPRESS'
}
如果您仍然遇到此错误,
"...'Failed to connect to Server:1433 - connect ECONNREFUSED Server IP:1433',
代码:'ESOCKET'}"
并且您已经检查了以下所有内容:
- 启用TCP/IP
- 打开端口 1433
- 正确配置设置(数据库、服务器、用户名和密码}
- 没有配置动态端口
检查您的 SQL 服务器版本。就我而言,我发现我可以使用相同的代码连接到 SQL 2012,但不能连接到 SQL 服务器 2016。看起来 SQL Server 2016 还不被繁琐的驱动支持。
如果其他人像我一样是 SQL 服务器的新手,并且正在处理这个问题,请按照以下步骤在 SQL 服务器配置管理器中启用 TCP/IP 后:
> SQL 服务器网络配置
> 您的SQLSERVERINSTANCE
的协议
> TCP/IP
> 启用
您会收到如下所示的警告消息:
Any changes made will be saved; however, they will not take effect until the service is stopped and restarted.
我的意思是,在 SQL Server Management Studio 中断开与数据库服务的连接并重新连接,但这需要在 SQL Server 下的 SQL Server Config Manager 中进行服务选项卡。找到你的 SQL 服务器实例,停止并重新启动它,希望你会成功!这对我来说就像一个魅力。奇怪的是,启用命名管道协议似乎无需重新启动即可工作(我可以看到错误消息中的差异),所以我认为它确实已停止并根据需要重新启动。
另外,一定要enable SQL Server Browser services。这和启用 TCP/IP 并重新启动服务是我的关键。
...
您必须在 MSSQLSERVER
的协议上启用 tcp/ip
并激活两个身份验证
这里是完整的代码
const {
Request
} = require('tedious');
var Connection = require('tedious').Connection;
var config = {
server: 'DESKTOP-RU9C12L', //update me
authentication: {
type: 'default',
options: {
userName: 'begaak', //update me
password: 'begaak@123', //update me
}
},
options: {
encrypt: true,
enableArithAbort: true,
integratedSecurity: true,
trustServerCertificate: true,
rowCollectionOnDone: true,
database: 'selvapoc' //update me
}
};
var connection = new Connection(config);
connection.connect(function(err) {
console.log('testing')
// var request = new Request("Select * from products", function(err, rowCount, rows) {
// console.log(rowCount);
// console.log(JSON.stringify(rows))
// });
// connection.execSql(request);
connection.execSql(new Request('SELECT * FROM Products', function(err, rowCount, rows) {
if (err) {
throw err;
}
})
.on('doneInProc', function(rowCount, more, rows) {
console.log(more, rows[0], rowCount); // not empty
}));
});
connection.on('connect', function(err) {
// If no error, then good to proceed.
if (err) console.log(err)
console.log("Connected");
});
在开始代码之前使用 SQL 服务器配置管理器 配置这些
当我尝试使用 Node.js 和 Tediious 连接到本地 SQL 服务器实例时,出现此错误:
{ [ConnectionError: Failed to connect to XXXXX:1433 - connect ECONNREFUSED]
name: 'ConnectionError',
message: 'Failed to connect to XXXXX:1433 - connect ECONNREFUSED',
code: 'ESOCKET' }
这是我的连接对象:
var config = {
userName: 'username',
password: 'password',
server: 'XXXXX',
options: {
database: 'databasename',
instancename: 'SQLEXPRESS'
}
};
我已检查并根据配置管理器在端口 1443 上启用并广播了 TCP/IP。 SQL Server Browser 服务也是 运行,如果不是,我读到它可能会导致此类问题。我已经禁用了我的防病毒软件和防火墙,但也没有帮助。
有什么见解吗?
所以我猜测发生的是,即使 Tedious 允许您在 'options' 中包含实例名称,它要么不使用它,要么不能使用它,因为它需要使用。在做了一些研究之后,应该发生的是当你给 SQL 服务器实例名称时,它会将你从端口 1433 重定向到它用于该实例的动态端口。我不知道它使用的是动态端口,但如果您的实例被命名,则端口将始终是动态的。 1433不知道在哪看到的,是我看错了
要检查动态端口,请看这里:
根据这些信息,我将代码更改为:
var config = {
userName: 'username',
password: 'password',
server: 'XXXXX',
options: {
port: 49175,
database: 'databasename',
instancename: 'SQLEXPRESS'
}
};
现在一切都很好,希望这对某人有所帮助。
如果启用TCP/IP协议后仍然有问题,我建议您检查SQL Server Browser Service is 运行ning。就我而言,我花了很多时间才意识到它不是 运行ning。
这个配置运行适合我:
var config = {
user: 'user',
password: 'userPwd',
server: 'localhost',
database: 'myDatabase',
options: {
truestedConnection: true,
instanceName: 'SQLEXPRESS'
}
如果您仍然遇到此错误,
"...'Failed to connect to Server:1433 - connect ECONNREFUSED Server IP:1433', 代码:'ESOCKET'}"
并且您已经检查了以下所有内容:
- 启用TCP/IP
- 打开端口 1433
- 正确配置设置(数据库、服务器、用户名和密码}
- 没有配置动态端口
检查您的 SQL 服务器版本。就我而言,我发现我可以使用相同的代码连接到 SQL 2012,但不能连接到 SQL 服务器 2016。看起来 SQL Server 2016 还不被繁琐的驱动支持。
如果其他人像我一样是 SQL 服务器的新手,并且正在处理这个问题,请按照以下步骤在 SQL 服务器配置管理器中启用 TCP/IP 后:
> SQL 服务器网络配置
> 您的SQLSERVERINSTANCE
的协议> TCP/IP
> 启用
您会收到如下所示的警告消息:
Any changes made will be saved; however, they will not take effect until the service is stopped and restarted.
我的意思是,在 SQL Server Management Studio 中断开与数据库服务的连接并重新连接,但这需要在 SQL Server 下的 SQL Server Config Manager 中进行服务选项卡。找到你的 SQL 服务器实例,停止并重新启动它,希望你会成功!这对我来说就像一个魅力。奇怪的是,启用命名管道协议似乎无需重新启动即可工作(我可以看到错误消息中的差异),所以我认为它确实已停止并根据需要重新启动。
另外,一定要enable SQL Server Browser services。这和启用 TCP/IP 并重新启动服务是我的关键。
... 您必须在 MSSQLSERVER
的协议上启用 tcp/ip并激活两个身份验证
这里是完整的代码
const {
Request
} = require('tedious');
var Connection = require('tedious').Connection;
var config = {
server: 'DESKTOP-RU9C12L', //update me
authentication: {
type: 'default',
options: {
userName: 'begaak', //update me
password: 'begaak@123', //update me
}
},
options: {
encrypt: true,
enableArithAbort: true,
integratedSecurity: true,
trustServerCertificate: true,
rowCollectionOnDone: true,
database: 'selvapoc' //update me
}
};
var connection = new Connection(config);
connection.connect(function(err) {
console.log('testing')
// var request = new Request("Select * from products", function(err, rowCount, rows) {
// console.log(rowCount);
// console.log(JSON.stringify(rows))
// });
// connection.execSql(request);
connection.execSql(new Request('SELECT * FROM Products', function(err, rowCount, rows) {
if (err) {
throw err;
}
})
.on('doneInProc', function(rowCount, more, rows) {
console.log(more, rows[0], rowCount); // not empty
}));
});
connection.on('connect', function(err) {
// If no error, then good to proceed.
if (err) console.log(err)
console.log("Connected");
});
在开始代码之前使用 SQL 服务器配置管理器 配置这些