Tedious: SQL Server 2012 ECONNREFUSED

Созданный на 8 дек. 2012  ·  20Комментарии  ·  Источник: tediousjs/tedious

Использование последних nodejs и утомительных версий и следующего кода:

var Connection = require ('утомительно'). Connection;
var Request = require ('утомительно'). Request;

var config =
{
сервер: '192.168.1.113',
userName: 'myUserName',
пароль: 'myPassword',
параметры:
{
база данных: 'MyDatabase',
порт: '1433',
encrypt: true,
драйвер: «Собственный клиент SQL Server 11.0»
},
отлаживать:
{
пакет: правда,
данные: правда,
полезная нагрузка: правда,
токен: правда,
журнал: правда
}
};

var connection = новое соединение (config);

connection.on ('подключиться', подключено);
connection.on ('infoMessage', infoError);
connection.on ('errorMessage', infoError);
connection.on ('конец', конец);
connection.on ('отладка', отладка);

функция подключена (ошибка)
{
console.log ('connected =>' + ошибка);
}

функция infoError (информация)
{
console.log ('infoError =>' + информация);
}

отладка функции (сообщение)
{
console.log ('debug =>' + сообщение);
}

функция end ()
{
}

После запуска я получаю следующую ошибку:

узел test_sqlserver_tedious.js
debug => подключение к 192.168.1.113:1433 - сбой Ошибка: подключите ECONNREFUSED
отладка => Изменение состояния: Подключение -> Окончание
debug => подключение к 192.168.1.113:1433 закрыто
отладка => Изменение состояния: Окончательный -> Окончательный

Любые идеи? Я мог бы помочь вам проверить источник, если вы покажете мне, как это сделать.

Спасибо

Самый полезный комментарий

ECONNREFUSED предполагает, что 192.168.1.113 не прослушивает порт 1433.

Действительно ли в экземпляре SQL Server включен протокол TCP?
Можете ли вы подключиться через telnet к порту 1433 на 192.168.1.113 (из системы, которую вы используете утомительно)? Если нет, можете ли вы подключиться к порту 1433 напрямую с 192.168.1.113? Если нет, то предполагается, что SQL Server не прослушивает порт. Если да, то это говорит о том, что что-то (возможно, брандмауэр) является причиной проблемы.

Все 20 Комментарий

ECONNREFUSED предполагает, что 192.168.1.113 не прослушивает порт 1433.

Действительно ли в экземпляре SQL Server включен протокол TCP?
Можете ли вы подключиться через telnet к порту 1433 на 192.168.1.113 (из системы, которую вы используете утомительно)? Если нет, можете ли вы подключиться к порту 1433 напрямую с 192.168.1.113? Если нет, то предполагается, что SQL Server не прослушивает порт. Если да, то это говорит о том, что что-то (возможно, брандмауэр) является причиной проблемы.

Я получаю сообщение об ошибке:

debug => подключение к undefined: 1433 - сбой Ошибка: подключение ECONNREFUSED
отладка => Изменение состояния: Подключение -> Окончание
отладка => соединение с undefined: 1433 закрыто
отладка => Изменение состояния: Окончательный -> Окончательный

    debug=> connection to undefined:1433 closed

undefined выглядит подозрительно. Я ожидал увидеть там имя сервера или IP-адрес.

dbServer: 192.168.11.8 \ SQLEXPRESS2008
dbPort: 1433

@flybluewolf, пожалуйста, взгляните на выпуск № 68, так как я думаю, что мой ответ там уместен.

ОК, похоже, сейчас подключается. Но когда я пытаюсь сделать простой выбор, он просто зависает.

Вот результат отладки:

отладчик прослушивает порт 51981
отладка => подключен к 127.0.0.1:1433
отладка => Изменение состояния: Подключение -> SentPrelogin
отладка => Изменение состояния: SentPrelogin -> SentLogin7WithStandardLogin
infoError => [объект Object]
infoError => [объект Object]
debug => Размер пакета изменен с 4096 на 4096
отладка => Изменение состояния: SentLogin7WithStandardLogin -> LoggedInSendingInitialSql
отладка => Изменение состояния: LoggedInSendingInitialSql -> LoggedIn

Вот мой код:

var Connection = require ('утомительно'). Connection;
var Request = require ('утомительно'). Request;

var config =
{
сервер: «127.0.0.1»,
userName: "имя пользователя",
пароль: "пароль пользователя",
база данных: "MyDatabase",
параметры:
{
база данных: "MyDatabase",
// порт: "1433",
// encrypt: true,
// драйвер: "Собственный клиент SQL Server 11.0"
},
отлаживать:
{
пакет: правда,
данные: правда,
полезная нагрузка: правда,
токен: правда,
журнал: правда
}
};

var connection = новое соединение (config);

connection.on ('подключиться', подключено);
connection.on ('infoMessage', infoError);
connection.on ('errorMessage', infoError);
connection.on ('конец', конец);
connection.on ('отладка', отладка);

функция подключена (ошибка)
{
executeStatement ();
}

функция executeStatement ()
{
var request = new Request («Выбрать * из Property.PropertyGroups», функция (err, row_count)
{
если (ошибка)
{
}
еще
{
console.log (row_count);
}

    connection.close();
});

request.on('row', function(columns)
{
    columns.forEach((function(column)
    {
        console.log(column.value);
    }))
})

}

функция infoError (информация)
{
var dd = info;
console.log ('infoError =>' + информация);
}

отладка функции (сообщение)
{
var dd = message;
console.log ('debug =>' + сообщение);
}

функция end ()
{
вар дд = '';
}

Я выполняю netstat -na, но не нахожу порт UDP 1444

Я не вижу в вашем коде вызова connection.exec...(request) . Значит, запрос не выполняется. Это согласуется с сообщениями debug=> State change: ... . Они останавливаются после завершения аутентификации.

Ух, хорошо, это помогло. Большое вам спасибо: D

Я так понимаю, что @flybluewolf - одно и то же лицо, и что эта проблема
Если я ошибаюсь, не стесняйтесь открывать заново.

Нет, это два разных человека. Я начал публикацию, и теперь она работает.

Привет, извините за то, что восстановил это, но у меня возникает проблема с использованием последнего фрагмента кода, опубликованного @adviner (

отладка => подключен к СЕРВЕРУ: 1433
отладка => Изменение состояния: Подключение -> SentPrelogin
отладка => Изменение состояния: SentPrelogin -> SentLogin7WithStandardLogin
отладка => подключение к СЕРВЕРУ: 1433 закрыто
отладка => Изменение состояния: SentLogin7WithStandardLogin -> Final
отладка => подключение к СЕРВЕРУ: 1433 закрыто
отладка => Изменение состояния: Окончательный -> Окончательный

(URL-адрес сервера скрыт).

База данных работает в Azure, и я могу подключиться к ней по telnet с компьютера, на котором запущен узел.

Любая помощь будет оценена по достоинству.

Насколько я понимаю, для баз данных Azure требуется зашифрованное соединение.
Предположительно, вы подключаетесь с помощью encrypt: true в параметрах подключения? Я спрашиваю, потому что https://github.com/pekim/tedious/issues/65#issuecomment -11765693 это закомментировано.

Используемый вами код не проверяет наличие ошибок в обратном вызове Connection, функции connected . Вы должны исправить это, так как вы можете получить сообщение об ошибке.

Зашифрованные утомительные соединения с узлом v0.10 (и v0.9) были нарушены. См. # 86 для получения дополнительной информации и фиксации, которая, как мне кажется, решает проблему.

Тот же коммит, который исправляет проблему v0.10, также по умолчанию использует шифр шифрования RC4-MD5, потому что мне еще не удалось получить зашифрованные соединения, работающие с DES-CBC3-SHA. Это также относится к узлу v0.8.

Не могли бы вы попробовать использовать последний код в мастере, чтобы подобрать исправление, пожалуйста?

Если это все еще не удается, не могли бы вы поместить все отладочные данные в gist или pastebin, пожалуйста? Вы должны получить много деталей, включая шестнадцатеричные дампы пакетов TDS. Возможно, вы захотите отредактировать некоторые детали из пакета login7.

Спасибо за быстрый ответ. Я прошёл предыдущую ошибку, но теперь получаю следующий результат:

debug => подключен к XXX.database.windows.net:1433
отладка => Изменение состояния: Подключение -> SentPrelogin
отладка => Изменение состояния: SentPrelogin -> SentTLSSSLNegotiation
отладка => TLS согласован (RC4-MD5, TLSv1 / SSLv3)
отладка => Изменение состояния: SentTLSSSLNegotiation -> SentLogin7WithStandardLogin
infoError => [объект Object]
{"number": 40531, "state": 1, "class": 11, "message": "Невозможно определить имя сервера. Оно должно отображаться как первый сегмент DNS-имени сервера (servername.database.windows.net Некоторые библиотеки не отправляют имя сервера, и в этом случае имя сервера должно быть включено как часть имени пользователя (username @ servername). Кроме того, если используются оба формата, имена серверов должны совпадать. "," serverName ":" "," procName ":" "," lineNumber ": 1," name ":" ERROR "," event ":" errorMessage "}
Авторизация не удалась; должно было быть отправлено одно или несколько событий errorMessage
отладка => Изменение состояния: SentLogin7WithStandardLogin -> Final
debug => подключение к XXXX.database.windows.net:1433 закрыто
отладка => Изменение состояния: Окончательный -> Окончательный

Имя сервера помечено как XXX (я предполагаю), и это часть строки подключения для лазурного db.

Последней проблемой была проблема с нашей строкой подключения. Теперь все работает. Спасибо!

Фантастика.
Было ли это с последним кодом от мастера или с выпущенной версией утомительно?

Клонировал последнюю версию от мастера

Уважаемые специалисты!
Я столкнулся с такой же ошибкой, но проблема в том, что моя ошибка возникает после того, как соединение установлено, и он вставляет большие файлы в базу данных, у меня нет проблем с небольшими файлами:

добавление данных в базу данных
получение столбцов из БД
успешно получили столбцы таблицы
добавление строк в БД
строки вставлены успешно
добавление данных в базу данных
получение столбцов из БД
успешно получили столбцы таблицы
добавление строк в БД
строки вставлены успешно
добавление данных в базу данных
получение столбцов из БД
успешно получили столбцы таблицы
добавление строк в БД
строки вставлены успешно
добавление данных в базу данных
получение столбцов из БД
успешно получили столбцы таблицы
добавление строк в БД
{[ConnectionError: Failed to connect to localhost: 1433 - connect EADDRINUSE 127 .0.0.1: 1433] name: 'ConnectionError', message: 'Failed to connect to localhost: 1433 - connect EADDRINUSE 127.0.0.1:1 433', code : 'ESOCKET'}

Ваша поддержка ценится.

@Beniy У вас есть пример кода, который мы можем использовать, чтобы воспроизвести это?

Дорогой Артуршрайбер,
На самом деле проблема не может быть связана с кодом, потому что иногда он анализирует текстовый файл и вставляет его в базу данных, но иногда показывает эту ошибку, даже с тем же файлом и тем же условием, но в разное время.
Я хочу знать какие-либо другие зависимости этой задачи?

Спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги