web-dev-qa-db-fra.com

Node.js et Microsoft SQL Server

Existe-t-il un moyen de faire communiquer mon application Node.js avec Microsoft SQL? Je n'ai vu aucun pilote MS SQL dans la nature?

Je crée une application très simple et je dois pouvoir communiquer avec une base de données MS SQL existante (sinon j'aurais choisi mongoDB ou Redis)

69
Khuram Malik

Nous venons de publier des pilotes d'aperçu pour Node.JS pour la connectivité SQL Server. Vous pouvez les trouver ici: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-Microsoft-driver-for-node-js-for-sql- server.aspx

21
kop48

La question d'origine est ancienne et utilise maintenant node-mssql comme répondu par @Patrik Šimek qui se termine Tedious comme répondu par @ Tracker1 est la meilleure façon de procéder.

Le Windows/Azure node-sqlserver driver comme mentionné dans la réponse acceptée vous oblige à installer une liste folle de prérequis: Visual C++ 2010, SQL Server Native Client 11.0, python = 2.7.x et probablement aussi le SDK Windows 7 pour 64 bits sur votre serveur. Vous ne voulez pas installer tous ces Go de logiciels sur votre serveur Windows si vous me le demandez.

Vous voulez vraiment utiliser Tedious . Mais aussi utilisez node-mssql pour envelopper et rendre le codage beaucoup plus facile.

Mise à jour d'août 2014

  • Les deux modules sont toujours activement maintenus. Les problèmes sont traités assez rapidement et efficacement.
  • Les deux modules prennent en charge SQL Server 2000-2014
  • Streaming pris en charge depuis node-mssql 1.0.1

Mise à jour février 2015 - 2.x (stable, npm)

  • Mise à jour vers la dernière Tedious 1.10
  • Promesses
  • Demande de canal vers le flux d'objet
  • Erreurs SQL détaillées
  • Traitement d'abandon de transaction
  • Contrôles de type intégrés
  • CLI
  • Corrections mineures

C'est simple fastidieux :

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

var config = {
  server: '192.168.1.212',
  userName: 'test',
  password: 'test'
};

var connection = new Connection(config);

connection.on('connect', function(err) {
    executeStatement();
  }
);

function executeStatement() {
  request = new Request("select 42, 'hello world'", function(err, rowCount) {
    if (err) {
      console.log(err);
    } else {
      console.log(rowCount + ' rows');
    }

    connection.close();
  });

  request.on('row', function(columns) {
    columns.forEach(function(column) {
      if (column.value === null) {
        console.log('NULL');
      } else {
        console.log(column.value);
      }
    });
  });

  request.on('done', function(rowCount, more) {
    console.log(rowCount + ' rows returned');
  });

  // In SQL Server 2000 you may need: connection.execSqlBatch(request);
  connection.execSql(request);
}

Voici node-mssql qui a Tedious comme dépendance. Utilisez ceci!

var sql     = require('mssql');

var config = {
  server: '192.168.1.212',
  user:     'test',
  password: 'test'
};

sql.connect(config, function(err) {
    var request = new sql.Request();
    request.query("select 42, 'hello world'", function(err, recordset) {
        console.log(recordset);
    });
});
50

Quelques nouveaux clients de serveur SQL node.js viennent de sortir récemment. J'en ai écrit un appelé node-tds et il y en a un autre appelé fastidieux

24
Chad Retz

Vous pourriez peut-être utiliser node-tds.js :

Une implémentation passionnante du protocole TDS pour node.js pour permettre la communication avec le serveur sql ...

USAGE:

var mssql = require('./mssql');
var sqlserver = new mssql.mssql();
sqlserver.connect({'Server':__IP__,'Port':'1433','Database':'','User Id':'','Password':''});
var result = sqlserver.execute("SELECT * FROM wherever;");
10
John Boker

Il existe un autre module que vous pouvez utiliser - node-mssql . Il utilise d'autres modules TDS comme pilotes et offre une interface unifiée facile à utiliser. Il ajoute également des fonctionnalités supplémentaires et des corrections de bugs.

Fonctionnalités supplémentaires:

  • Interface unifiée pour plusieurs pilotes MSSQL
  • Mise en commun des connexions avec les transactions et les relevés préparés
  • Procédures stockées paramétrées pour tous les pilotes
  • Sérialisation des types CLR de géographie et de géométrie
  • Mappeur de type de données Smart JS vers type de données SQL
  • Prend en charge les promesses et les rappels standard
8
Patrik Šimek

(reproduisant ma réponse d'une autre question).

Je recommanderais node-mssql , qui est un joli wrapper pour d'autres connecteurs, la valeur par défaut étant mon choix précédent ( Tedious ) apportant un peu plus d'interface. Il s'agit d'une implémentation JavaScript, sans exigences de compilation, ce qui signifie que vous pouvez travailler dans des environnements Windows et non Windows.

Une autre option, si cela ne vous dérange pas d'intégrer .Net ou Mono avec un pont binaire serait d'utiliser Edge.js . Ce qui peut être très bien si vous souhaitez tirer parti des bibliothèques .Net dans node.js

node-tds est abandonné, node-odbc ne fonctionne pas avec Windows, et le pilote MS node-sqlserver ne semble pas fonctionner sur les non-fenêtres (et a des exigences maladroites).

7
Tracker1

TSQLFTW - T-SQL pour le WIN (dows) - par Fosco Marotto https://github.com/gfosco/tsqlftw

Il s'agit d'une solution de code managé C # et ADO .NET, avec un wrapper C++ avec lequel Node.js peut importer et travailler.


Si vous connaissez .NET, vous pouvez essayer WCF Data Services (ADO.NET Data Services); écrire une application WCF pour l'accès aux données et utiliser odata (REST sur les stéroïdes) pour interagir avec la base de données


Si vous êtes dans SOA et utilisez SQL Server 2005, vous pouvez consulter les services Web XML natifs pour Microsoft SQL Server 2005

http://msdn.Microsoft.com/en-us/library/ms345123 (v = sql.90) .aspx

Vous pouvez accéder à SQL Server en tant que service Web (HTTP, SOAP)

5
Jeno Laszlo

Microsoft (l'équipe Windows Azure) vient de publier un pilote de nœud pour SQL SERVER.

Il n'y a pas de paquet pour npm yert, pour autant que je sache, mais il est open source. Et la contribution communautaire acceptante aussi.

https://github.com/WindowsAzure/node-sqlserver

Article de blog d'introduction ici:

http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-Microsoft-driver-for-node-js-for-sql-server.aspx

4
silverfighter

Il y a une mise à jour de Microsoft. Voici une série d'articles de blog ( partie 1 et partie 2 ).

2
user1467882

Si vous exécutez sur .NET, regardez entityspaces.js sur, nous créons un ORM universel complet pour Node.js qui ne nécessitera pas de service WCF JSON ... https://github.com/EntitySpaces/ entityspaces.js

Si vous utilisez la technologie de backend MSFT, vous pouvez l'utiliser maintenant, cependant, nous créons un ORM Node.js universel et nous aurons bientôt plus d'informations à ce sujet.

2
Mike Griffin

Les pilotes Node.js SQL Server semblent très immatures - il existe un mélange de différents projets avec des dépendances, des performances et des niveaux d'exhaustivité variables, aucun d'entre eux n'inspirant confiance.

Je proposerais d'utiliser Edge-sql . Cela exploite l'écosystème de pilotes de base de données mature de .NET et ne dépend que de .NET (une évidence si vous exécutez un nœud sur Windows - sinon il y a Mono , mais je n'ai pas essayé cela).

Voici un exemple de nœud (server.js) utilisant Edge-sql (notez que vous devez placer votre chaîne de connexion dans une variable d'environnement selon les documents Edge-sql):

var Edge = require('Edge');

// Edge-sql has built in support for T-SQL / MSSQL Server
var getData = Edge.func('sql', function () {/*
    select top 10 * from sometable
*/
});

getData(null, function (error, result) {
    if (error) throw error;
    console.log(result);
});

Vous pouvez également utiliser Edge.js avec .NET pour accéder à d'autres bases de données, telles qu'Oracle. J'ai donné un exemple de cette approche ici .

1
saille

La situation au mois de mai 2016 est la suivante.

Le pilote officiel Microsoft SQL pour Node, appelé node-sqlserver , n'a pas été mis à jour depuis un certain nombre d'années.

Il y a une nouvelle fourchette à ce sujet appelée node-sqlserver-v8 qui fonctionne avec Node Versions 0.12.x. et> = 4.1.x. Cette fourche a également pré -des binaires compilés pour les cibles x64 et x86.

Le package est disponible sur NPM sous la forme msnodesqlv8 .

Je recommande ce package car il est léger (sans dépendances) et c'est le seul qui fonctionne avec toutes les versions récentes de SQL Server, y compris SQL LocalDB.

0
Noel Abrahams

Maintenant (2016), vous pouvez utiliser Sequelize ORM qui prend en charge:

  • MySQL/MariaDB,
  • PostgreSQL
  • SQLite
  • Microsoft SQL Server

Il est largement utilisé selon ses étoiles de Github .

0
Supersharp