67

我正在尝试使用带有mssql连接接口的 NodeJS 连接到 MSSQL 2012。

尝试连接时出现以下错误:

{ [ConnectionError: Failed to connect to localhost:1433 - connect ECONNREFUSED]
  name: 'ConnectionError',
  message: 'Failed to conncet to localhost:1433 - connect ECONNREFUSED',
  code: 'ESOCKET' }

有想法该怎么解决这个吗?

4

11 回答 11

121

解决方案是启用默认禁用的 TCP 连接。

在此处输入图像描述

于 2014-08-29T22:50:49.640 回答
30

我的情况与马特的​​情况并不完全相同,但他的截图足以让我记住缺少的内容。

在此处输入图像描述

正如这里所说,当您使用 SQL Server 实例名称连接到它时,您必须运行 SQL Server Browser。

options.instanceName

要连接的实例名称。SQL Server Browser 服务必须在数据库服务器上运行,并且数据库服务器上的 UDP 端口 1434 必须可以访问。

(无默认)

与 options.port 互斥。

于 2015-06-08T13:08:33.873 回答
21

如果启用 TCP 连接后您的配置仍然无法正常工作。这是我自己的配置。

var config = {
    "user": 'admin',
    "password": 'password',
    "server": 'WINDOWS-PC',
    "database": 'database_name',
    "port": 61427, // make sure to change port
    "dialect": "mssql",
    "dialectOptions": {
        "instanceName": "SQLEXPRESS"
    }
};
于 2016-12-13T13:26:30.710 回答
16

如果有人尽管做了所有建议,但仍然难以连接。
在我的情况下,我必须在 SQL Server 网络配置 -> 用于...的协议 -> TCP/IP -> IP 地址 -> IPAll 中手动将 TCP 端口属性设置为 1433。

[1]

于 2019-01-15T14:23:04.237 回答
6

最佳实践是首先使用查询分析器(SQL Management Studio (Windows) 或用于 MSSQL (Mac) 的 SQLPro)使用您希望通过应用程序使用的相同协议、端口和凭据来验证与 SQL 服务器的连接。

在 Management Studio 中,格式为 Server,Port(例如 192.168.1.10,1433);您可能会使用 SQL Server 身份验证而不是 Windows 身份验证。


配置 SQL Server 的步骤:

如果您打算使用 SQL Server 身份验证,请使用混合身份验证进行安装。

设置 SQL Server 以在固定端口号上侦听 TCP:

  • SQL 配置管理器 SQL Server 网络配置
    • {Instance} 的协议
      • TCP/IP - 启用(双击)
      • IP 地址(在所有需要的接口上)
        • TCP 动态端口 = 空白!(不为零)
        • TCP 端口 - 1433(或所需端口)
于 2016-06-22T01:33:53.237 回答
3

就我而言,存在配置问题。这是错误的配置

let config = {
server: 'localhost',
authentication: {
    type: 'default',
    options: {
        userName: 'sa', // update me
        password: 'xxxxx' // update me
    }
},
options: {
    database: 'SampleDB',
    validateBulkLoadParameters:false,
}}

然后我在选项中添加了加密变量。它解决了我的问题。更正了配置

let config = {
server: 'localhost',
authentication: {
    type: 'default',
    options: {
        userName: 'sa', // update me
        password: 'xxxxxx' // update me
    }
},
options: {
    database: 'SampleDB',
    validateBulkLoadParameters:false,
    encrypt: false,
}

}

于 2020-09-10T14:19:05.977 回答
3
**Please follow the connection configuration and little test:**

//Declare global variable
var http = require('http');
var events = require('events');
var nodemailer = require('nodemailer');
var sql = require('mssql');<br/>
var Request = require('tedious').Request;  
var TYPES = require('tedious').TYPES; 
//Create an http server
http.createServer(function(req,res)
{
res.writeHead(200, {'Content-Type': 'text/html'});
 var Connection = require('tedious').Connection; 
//Configure the connection 
    var config = {  
        userName: '<user id>',  
        password: '<password>',  
        server: '<system ip>',  
        options: {database: '<database name>'}  
    };  
    var connection = new Connection(config);  
    connection.on('connect', function(err) {  
        console.log("Connected"); 
        executeStatement();     
    }); 

function executeStatement() {  
        request = new Request("select getdate();", function(err) {  
        if (err) {  
            console.log(err);}  
        });
     var result = "";  
        request.on('row', function(columns) {  
            columns.forEach(function(column) {  
              if (column.value === null) {  
                console.log('NULL');  
              } else {  
                result+= column.value + " ";  
              }  
            });  
            console.log(result);  
            result ="";  
        });  

        connection.execSql(request);  
};
  return res.end();
}).listen(8080);

//在浏览器上发布配置测试: http://localhost:8080/

于 2018-04-25T05:34:05.673 回答
2

除了将 TCP 端口号设置为 1433 之外。如果您遇到“连接丢失 - 流被破坏后无法调用写入”错误

如果您在带有旧 SQL Server 版本的 Node v12+ 上使用 options.encrypt: true ,也会出现此错误。

这是由需要 TLS 1.2 的 Node v12 引起的。

  • 为您的 SQL Server 安装 TLS 1.2 安全补丁
  • 运行带有向后兼容标志的节点:

    node --tls-min-v1.0

    例如: node --tls-min-v1.0 app.js

  • 通过设置禁用加密通信

    options.encrypt: false(可选的)

配置对象:

const config = {
      user: '...',
      password: '...',
      server: 'localhost', 
      database: '...',
      'options.encrypt': false   
   }

参考: https ://github.com/tediousjs/tedious/issues/903#issuecomment-614597523

于 2020-05-17T18:59:49.450 回答
1

尽管我在 SQL Management Studio 和其他应用程序中使用了“localhost”,但我无法连接到“localhost”。当我使用计算机名(网络地址)时,它起作用了!

于 2016-08-05T14:25:19.463 回答
0

我的问题是我需要先在我的mac上使用这个命令使用docker启动sqlserver

sudo docker start sqlserver

于 2020-07-06T09:51:27.173 回答
0

对我来说,将此条件从“否”更改为“是”有效:

    switch (key) {
      case 'instance':
        return this.config.options.instanceName
      case 'trusted':
        return this.config.options.trustedConnection ? 'Yes' : 'Yes'

即使我提供了它,它也不会从选项对象中加载值。

我在文件\node_modules\mssql\lib\msnodesqlv8\connection-pool.js中硬编码了这个更改

于 2021-07-08T00:07:10.967 回答