Не удается подключиться к SQL Server с помощью Node.js и 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'
  }
};

Я проверил, TCP/IP включен и транслируется через порт 1443 в соответствии с Configuration Manager. Служба браузера SQL Server также работает, что, как я читал, может вызывать проблемы такого типа, если нет. Я отключил антивирус и брандмауэр, и это тоже не помогло.

Любое понимание?


person loganhuskins    schedule 31.08.2015    source источник


Ответы (6)


Итак, я предполагаю, что, хотя Tedious позволяет вам включать имя экземпляра в «параметры», он либо не использует его, либо не может использовать его по мере необходимости. После некоторых исследований должно произойти следующее: когда вы даете SQL Server имя экземпляра, он перенаправляет вас с порта 1433 на динамический порт, который он использует для этого экземпляра. Я не знал, что он использует динамический порт, но если ваш экземпляр назван, порт всегда будет динамическим. Я не знаю, где я видел это в эфире 1433, это была моя ошибка.

Чтобы проверить динамический порт, посмотрите здесь:

введите описание изображения здесь

Из этой информации я изменил свой код на это:

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

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

Теперь все хорошо, надеюсь, это поможет кому-то.

person loganhuskins    schedule 31.08.2015
comment
Я обнаружил, что важно использовать заглавные буквы instanceName (требуется заглавная буква N). - person christofr; 08.07.2016
comment
Мне нужно было только изменить порт и проигнорировать имя экземпляра. Жестоко, этого нет ни в одной документации Sequelize или Tedious! - person Steve Seeger; 15.12.2016
comment
Решил это для меня! Однако после номера порта отсутствует запятая. - person Sander_P; 16.04.2017
comment
В утомительной версии 6.4.0 (и, возможно, более ранней) вы можете указать порт или имя экземпляра, но не оба. - person Jay Walker; 23.09.2019

Если кто-то еще не знаком с SQL Server, как и я, и имеет дело с этой проблемой, после включения TCP/IP в диспетчере конфигурации SQL Server выполните следующие действия:

> Сетевая конфигурация SQL Server

> Протоколы для YOURSQLSERVERINSTANCE

> TCP/IP

> Включить

вы получите предупреждающее сообщение, которое выглядит следующим образом:

Любые внесенные изменения будут сохранены; однако они не вступят в силу, пока служба не будет остановлена ​​и перезапущена.

Я понял, что это означает отключение от службы базы данных в SQL Server Management Studio и повторное подключение, но это должно произойти в диспетчере конфигурации SQL Server на вкладке «Службы SQL Server». Найдите свой экземпляр SQL Server, остановите и перезапустите его, и, надеюсь, вы станете золотым! Это сработало для меня как шарм. Как ни странно, включение протокола Named Pipes, казалось, работало без перезапуска (я мог видеть разницу в сообщении об ошибке), поэтому я был уверен, что он остановился и перезапустился по мере необходимости.

Кроме того, не забудьте также включите службы браузера SQL Server. Это, а также включение TCP/IP и перезапуск службы были для меня ключами.

person no_stack_dub_sack    schedule 14.03.2018
comment
Помог мне! Спасибо! - person igor_bugaenko; 21.05.2019

Если у вас все еще есть проблемы после включения протокола TCP/IP, я бы посоветовал вам проверить, работает ли служба браузера SQL Server. В моем случае я потратил много времени, пока не понял, что он не работает.

Эта конфигурация работает нормально для меня:

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

Если у вас все еще есть эта ошибка,

"...'Не удалось подключиться к серверу:1433 – подключите ECONNREFUSED IP-адрес сервера: 1433', код: "ESOCKET""

и вы проверили все следующее:

  1. Включить TCP/IP
  2. Откройте порт 1433
  3. Конфигурация настроена правильно (база данных, сервер, имя пользователя и пароль}
  4. Динамические порты не настроены

Проверьте версию вашего SQL-сервера. В моем случае я обнаружил, что могу подключиться к SQL 2012, но не к SQL server 2016 с тем же кодом. Похоже, SQL Server 2016 еще не поддерживается утомительным драйвером.

person halfDigital    schedule 27.01.2017
comment
Я рад, что еще не использую sql server 2016... я на sql server 2014, и по какой-то причине мой TCP/IP не был включен по причине установки sql server 2014, к которой ничего не подключалось. Мастер Visual Studio ado.net прекрасно подключается с отключенным tcp/ip - person Tom Stickel; 26.04.2017

... Вы должны включить tcp/ip для протокола для MSSQLSERVER

введите здесь описание изображения

и активировать обе аутентификации

введите здесь описание изображения

person Hugues Gauthier    schedule 06.03.2020

вот полный код

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 введите здесь описание изображения

введите здесь описание изображения

person Rashid Iqbal    schedule 06.10.2020