14

当我尝试使用 Node.js 和 Tedioius 连接到本地 SQL Server 实例时,我收到此错误:

{ [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'
  }
};

我已经检查并根据配置管理器启用了 TCP/IP 并在端口 1443 上广播。SQL Server Browser 服务也在运行,如果没有,我读到的可能会导致此类问题。我已经禁用了我的防病毒软件和防火墙,但这也没有帮助。

有什么见解吗?

4

6 回答 6

21

所以我猜想发生的是,即使 Tedious 允许您在“选项”中包含实例名称,它要么不使用它,要么在需要使用时无法使用它。在做了一些研究之后,应该发生的事情是当您为 SQL Server 提供实例名称时,它会将您从端口 1433 重定向到它用于该实例的动态端口。我不知道它使用的是动态端口,但是如果您的实例被命名,则端口将始终是动态的。我不知道我在哪里看到它在 1433 广播,那是我的错误。

要检查动态端口,请看这里:

在此处输入图像描述

根据这些信息,我将代码更改为:

var config = {
  userName: 'username',
  password: 'password',
  server: 'XXXXX',

  options: {
    port: 49175,
    database: 'databasename',
    instancename: 'SQLEXPRESS'
  }
};

现在一切都很好,希望这对某人有所帮助。

于 2015-08-31T18:24:51.600 回答
4

如果其他人像我一样是 SQL Server 的新手,并且正在处理这个问题,一旦您按照以下步骤在 SQL Server 配置管理器中启用 TCP/IP:

> SQL Server 网络配置

> YOURSQLSERVERINSTANCE 的协议

> TCP/IP

> 启用

您会收到如下所示的警告消息:

所做的任何更改都将被保存;但是,它们在服务停止并重新启动后才会生效。

我认为这是在 SQL Server Management Studio 中断开与数据库服务的连接并重新连接,但这需要在 SQL Server 服务选项卡下的 SQL Server 配置管理器中进行。找到你的 SQL Server 实例,停止并重新启动它,希望你会成功!这对我来说就像一个魅力。奇怪的是,启用命名管道协议似乎无需重新启动即可工作(我可以看到错误消息中的差异),所以我确信它已经停止并根据需要重新启动。

此外,请务必同时启用 SQL Server Browser 服务。这和启用 TCP/IP 并重新启动服务是我的关键。

于 2018-03-14T02:46:18.993 回答
1

如果启用 TCP/IP 协议后仍有问题,建议您检查 SQL Server Browser 服务是否正在运行。就我而言,我花了很多时间才意识到它没有运行。

此配置对我来说运行良好:

 var config = {
     user: 'user',
     password: 'userPwd',
     server: 'localhost',
     database: 'myDatabase',
     options: {
         truestedConnection: true,
         instanceName: 'SQLEXPRESS'
    }
于 2016-11-16T10:04:18.190 回答
1

如果您仍然收到此错误,

...'无法连接到服务器:1433 - 连接 ECONNREFUSED 服务器 IP:1433',代码:'ESOCKET' }

并且您已经检查了以下所有内容:

  1. 启用 TCP/IP
  2. 打开端口 1433
  3. 正确配置设置(数据库、服务器、用户名和密码}
  4. 未配置动态端口

检查您的 SQL 服务器版本。就我而言,我发现我可以使用相同的代码连接到 SQL 2012,但不能连接到 SQL Server 2016 。繁琐的驱动程序似乎还不支持 SQL Server 2016。

于 2017-01-27T01:00:04.983 回答
0

...您必须在 MSSQLSERVER 的协议上启用 tcp/ip

在此处输入图像描述

并激活两个身份验证

在此处输入图像描述

于 2020-03-06T20:00:43.607 回答
0

这是完整的代码

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 SERVER CONFIGURATION MANAGER配置这些 在此处输入图像描述

在此处输入图像描述

于 2020-10-06T19:52:55.103 回答