无法使用Node.js和Tedious连接到SQL Server

时间:2015-08-31 16:30:26

标签: javascript sql-server node.js tcp tedious

当我尝试使用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'
  }
};

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

有什么见解?

6 个答案:

答案 0 :(得分:15)

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

要检查动态端口,请查看此处:

enter image description here

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

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

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

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

答案 1 :(得分:2)

如果其他人不熟悉SQL Server,并且正在处理此问题,请按照以下步骤在SQL Server配置管理器中启用TCP / IP:

> SQL Server网络配置

> YOURSQLSERVERINSTANCE的协议

> TCP / IP

>启用

您收到如下警告消息:

  

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

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

另外,请务必enable SQL Server Browser services。这个和启用TCP / IP并重新启动服务是我的关键。

答案 2 :(得分:1)

如果您仍然遇到此错误,

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

你已经检查了以下所有内容:

  1. 启用TCP / IP
  2. 打开端口1433
  3. 正确配置设置(数据库,服务器,用户名和密码}
  4. 未配置动态端口
  5. 检查您的SQL Server版本。就我而言,我发现我可以使用相同的代码连接到SQL 2012,但不能连接到 SQL server 2016 。似乎SQL Server 2016还不支持繁琐的驱动程序。

答案 3 :(得分:0)

如果启用TCP / IP协议后仍有问题,我建议您检查SQL Server Browser Service是否正在运行。在我的情况下,我花了很多时间,直到我意识到它没有运行。

这个配置对我来说运行良好:

 var config = {
     user: 'user',
     password: 'userPwd',
     server: 'localhost',
     database: 'myDatabase',
     options: {
         truestedConnection: true,
         instanceName: 'SQLEXPRESS'
    }

答案 4 :(得分:0)

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

enter image description here

并同时激活身份验证

enter image description here

答案 5 :(得分: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 进行配置 enter image description here

enter image description here