Tedious: SQL Server 2012 ECONNREFUSED

Créé le 8 déc. 2012  ·  20Commentaires  ·  Source: tediousjs/tedious

Utilisation des dernières versions de nodejs et fastidieuses et du code suivant :

var Connexion = require('ennuyeux').Connection;
var Request = require('ennuyeux').Request;

var config =
{
serveur : '192.168.1.113',
nom d'utilisateur : 'myUserName',
mot de passe : 'monmot de passe',
option :
{
base de données : 'MaBase',
port : '1433',
crypter : vrai,
pilote : 'SQL Server Native Client 11.0'
},
déboguer:
{
paquet : vrai,
données : vrai,
charge utile : vrai,
jeton : vrai,
log : vrai
}
} ;

var connection = new Connection(config);

connection.on('connect', connecté);
connection.on('infoMessage', infoError);
connection.on('errorMessage', infoError);
connection.on('fin', fin);
connection.on('debug', debug);

fonction connectée (err)
{
console.log('connected=> ' + err);
}

fonction infoErreur(info)
{
console.log('infoError=> ' + infos);
}

fonction debug (message)
{
console.log('debug=> ' + message);
}

fonction fin()
{
}

J'obtiens l'erreur suivante après l'avoir exécuté :

nœud test_sqlserver_tedious.js
debug=> connexion à 192.168.1.113:1433 - échec Erreur : connect ECONNREFUSED
debug=> Changement d'état : Connexion -> Final
debug=> connexion à 192.168.1.113:1433 fermée
debug=> Changement d'état : Final -> Final

Des idées? Je pourrais vous aider à tester la source si vous me montrez comment.

Merci

Commentaire le plus utile

ECONNREFUSED suggère que 192.168.1.113 n'écoute pas sur le port 1433.

TCP est-il définitivement activé sur l'instance SQL Server ?
Pouvez-vous telnet sur le port 1433 sur 192.168.1.113 (à partir du système sur lequel vous utilisez fastidieux) ? Sinon, pouvez-vous telnet sur le port 1433 directement à partir de 192.168.1.113 ? Si non, cela suggère que le serveur SQL n'écoute pas sur le port. Si oui, cela suggère que quelque chose (peut-être un pare-feu) est la cause du problème.

Tous les 20 commentaires

ECONNREFUSED suggère que 192.168.1.113 n'écoute pas sur le port 1433.

TCP est-il définitivement activé sur l'instance SQL Server ?
Pouvez-vous telnet sur le port 1433 sur 192.168.1.113 (à partir du système sur lequel vous utilisez fastidieux) ? Sinon, pouvez-vous telnet sur le port 1433 directement à partir de 192.168.1.113 ? Si non, cela suggère que le serveur SQL n'écoute pas sur le port. Si oui, cela suggère que quelque chose (peut-être un pare-feu) est la cause du problème.

J'obtiens l'erreur :

debug=> connexion à undefined:1433 - échec Erreur : connect ECONNREFUSED
debug=> Changement d'état : Connexion -> Final
debug=> connexion à undefined:1433 fermée
debug=> Changement d'état : Final -> Final

    debug=> connection to undefined:1433 closed

Le undefined semble suspect. Je m'attendrais à y voir le nom du serveur ou l'adresse IP.

dbServer : 192.168.11.8\SQLEXPRESS2008
dbPort : 1433

@flybluewolf s'il vous plaît jeter un oeil au problème #68, car je pense que ma réponse est pertinente.

OK, il semble se connecter maintenant. Mais quand j'essaie de faire une simple sélection, ça se bloque.

Voici la sortie de débogage :

débogueur écoutant sur le port 51981
debug=> connecté à 127.0.0.1:1433
debug=> Changement d'état : Connexion -> SentPrelogin
debug=> Changement d'état : SentPrelogin -> SentLogin7WithStandardLogin
infoError=> [objet Objet]
infoError=> [objet Objet]
debug=> La taille du paquet est passée de 4096 à 4096
debug=> Changement d'état : SentLogin7WithStandardLogin -> LoggedInSendingInitialSql
debug=> Changement d'état : LoggedInSendingInitialSql -> LoggedIn

Voici mon code :

var Connexion = require('ennuyeux').Connection;
var Request = require('ennuyeux').Request;

var config =
{
serveur : "127.0.0.1",
userName : "nom d'utilisateur",
mot de passe : "mot de passe utilisateur",
base de données : "MaBase",
option :
{
base de données : "MaBase de données",
// port : "1433",
//crypter : vrai,
// pilote : "SQL Server Native Client 11.0"
},
déboguer:
{
paquet : vrai,
données : vrai,
charge utile : vrai,
jeton : vrai,
log : vrai
}
} ;

var connection = new Connection(config);

connection.on('connect', connecté);
connection.on('infoMessage', infoError);
connection.on('errorMessage', infoError);
connection.on('fin', fin);
connection.on('debug', debug);

fonction connectée (err)
{
executeStatement();
}

fonction executeStatement()
{
var request = new Request("Select * from Property.PropertyGroups", function(err, row_count)
{
si (erreur)
{
}
autre
{
console.log(row_count);
}

    connection.close();
});

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

}

fonction infoErreur(info)
{
var jj = infos;
console.log('infoError=> ' + infos);
}

fonction debug (message)
{
var jj = message ;
console.log('debug=> ' + message);
}

fonction fin()
{
var dd = '';
}

J'exécute 'netstat -na', mais je ne trouve pas le port UDP 1444

Je ne vois aucun appel à connection.exec...(request) dans votre code. La requête n'est donc pas exécutée. C'est cohérent avec les messages debug=> State change: ... . Ils s'arrêtent une fois l'authentification terminée.

Euh, OK, ça a fait l'affaire. Merci beaucoup :D

Je suppose que @flybluewolf sont la même personne, et que ce problème ne traite que d'un seul problème ?
Si je me trompe, n'hésitez pas à rouvrir.

Non, ce sont deux personnes différentes. J'ai commencé le post et maintenant il fonctionne.

Bonjour, désolé d'avoir ravivé cela, mais je rencontre un problème avec le dernier extrait de code publié par @adviner (avec les informations d'identification correctement modifiées, bien sûr). Je ne peux jamais dépasser la phase SentPreLogin. En utilisant le même code, tout le résultat que j'obtiens est :

debug=> connecté à SERVERt:1433
debug=> Changement d'état : Connexion -> SentPrelogin
debug=> Changement d'état : SentPrelogin -> SentLogin7WithStandardLogin
debug=> connexion au SERVEUR : 1433 fermée
debug=> Changement d'état : SentLogin7WithStandardLogin -> Final
debug=> connexion au SERVEUR : 1433 fermée
debug=> Changement d'état : Final -> Final

(URL du serveur masquée).

La base de données s'exécute dans Azure et je peux y accéder par telnet à partir du nœud exécutant la machine.

Toute aide serait appréciée.

Si je comprends bien, les bases de données Azure nécessitent une connexion chiffrée.
Donc, vous vous connectez probablement avec encrypt: true dans les options de connexion ? Je demande parce que https://github.com/pekim/tedious/issues/65#issuecomment -11765693 a commenté ceci.

Le code que vous utilisez ne vérifie pas une erreur dans le rappel de connexion, la fonction connected . Vous devriez corriger cela, car une erreur peut y être signalée.

Les connexions cryptées fastidieuses avec le nœud v0.10 (et v0.9) ont été rompues. Voir #86 pour un peu plus d'informations, et un commit qui, je pense, résout le problème.

Le même commit qui résout le problème de la v0.10, définit également le chiffrement par défaut sur RC4-MD5, car je n'ai pas encore réussi à obtenir des connexions cryptées fonctionnant avec DES-CBC3-SHA. Cela s'applique également au nœud v0.8.

Pouvez-vous essayer d'utiliser le dernier code dans master, pour récupérer le correctif, s'il vous plaît ?

Si cela échoue toujours, pouvez-vous mettre toutes les sorties de débogage dans un gist ou un pastebin s'il vous plaît ? Vous devriez obtenir beaucoup de détails, y compris des vidages hexadécimaux des paquets TDS. Vous voudrez probablement supprimer certains détails du paquet login7.

Merci pour la réponse rapide. J'ai dépassé l'erreur précédente, mais j'obtiens maintenant la sortie suivante :

debug=> connecté à XXX.database.windows.net:1433
debug=> Changement d'état : Connexion -> SentPrelogin
debug=> Changement d'état : SentPrelogin -> SentTLSSSLNegotiation
debug=> TLS négocié (RC4-MD5, TLSv1/SSLv3)
debug=> Changement d'état : SentTLSSSLNegotiation -> SentLogin7WithStandardLogin
infoError=> [objet Objet]
{"number":40531,"state":1,"class":11,"message":"Le nom du serveur ne peut pas être déterminé. Il doit apparaître comme le premier segment du nom DNS du serveur (servername.database.windows.net ). Certaines bibliothèques n'envoient pas le nom du serveur, auquel cas le nom du serveur doit être inclus dans le nom d'utilisateur (username@servername). De plus, si les deux formats sont utilisés, les noms de serveur doivent correspondre."," serverName":"","procName":"","lineNumber":1,"name":"ERROR","event":"errorMessage"}
Échec de la connexion; un ou plusieurs événements errorMessage auraient dû être émis
debug=> Changement d'état : SentLogin7WithStandardLogin -> Final
debug=> connexion à XXXX.database.windows.net:1433 fermée
debug=> Changement d'état : Final -> Final

Le nom du serveur est marqué comme XXX (je suppose) et fait partie de la chaîne de connexion pour la base de données azur.

Le dernier problème était un problème avec notre chaîne de connexion Tout fonctionne maintenant. Merci!

Fantastique.
Était-ce avec le dernier code de master, ou une version publiée de fastidieux ?

Cloné la dernière version du maître

Chers connaisseurs,
J'ai rencontré la même erreur, mais le problème est que mon erreur se produit après l'établissement d'une connexion et l'insertion de gros fichiers dans la base de données, je n'ai aucun problème avec les petits fichiers :

ajout de données à la base de données
obtenir des colonnes de la base de données
les colonnes du tableau ont été obtenues avec succès
ajout de lignes à la base de données
lignes insérées avec succès
ajout de données à la base de données
obtenir des colonnes de la base de données
les colonnes du tableau ont été obtenues avec succès
ajout de lignes à la base de données
lignes insérées avec succès
ajout de données à la base de données
obtenir des colonnes de la base de données
les colonnes du tableau ont été obtenues avec succès
ajout de lignes à la base de données
lignes insérées avec succès
ajout de données à la base de données
obtenir des colonnes de la base de données
les colonnes du tableau ont été obtenues avec succès
ajout de lignes à la base de données
{ [ConnectionError : Échec de la connexion à l' hôte local : 1433 - connectez EADDRINUSE 127 .0.0.1 : 1433] nom : 'ConnectionError', message : 'Échec de la connexion à l' hôte local : 1433 - connectez EADDRINUSE 127.0.0.1:1 433', code : 'ESOCKET' }

Votre soutien est apprécié.

@Beniy Avez-vous un exemple de code que nous pouvons utiliser pour reproduire cela?

Cher Arthurschreiber,
En fait, le problème ne peut pas être lié au code car parfois il analyse un fichier texte et l'insère dans la base de données, mais parfois il affiche cette erreur, même avec le même fichier et la même condition mais à un moment différent.
Je veux connaître d'autres dépendances à cette tâche?

Merci

Cette page vous a été utile?
0 / 5 - 0 notes