无法连接到 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'}"

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

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

检查您的 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 服务器配置管理器 配置这些