Node.js und Microsoft SQL Server

70

Kann ich meine Node.js-App auf irgendeine Weise dazu bringen, mit Microsoft SQL zu kommunizieren? Ich habe noch keine MS SQL-Treiber in freier Wildbahn gesehen.

Ich stelle eine sehr einfache App zusammen und muss in der Lage sein, mit einer vorhandenen MS SQL-Datenbank zu kommunizieren (sonst wäre ich mit mongoDB oder Redis gegangen).

Khuram Malik
quelle
ähnlich dieser Frage stackoverflow.com/questions/4728385/…
John Boker
Ich habe nach "node.js SQL Server" und Variationen dieser Zeichenfolge gesucht, aber keine Antworten gefunden.
Khuram Malik
Sie können Prisma als ORM
ausprobieren

Antworten:

22

Wir haben gerade Vorschau-Treiber für Node.JS für SQL Server-Konnektivität veröffentlicht. Sie finden sie hier: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx

kop48
quelle
4
Dies ist nur für den Moment Windows. Ich nehme an, dass die meisten Leute, die SQL Server oder Azure verwenden, sowieso Windows-Leute sind, aber es gibt einige, die nur ihr vorhandenes System tief in der SQL Server-Welt haben. Im Folgenden wird der Benutzer von plattformübergreifendem ODBC für diejenigen erwähnt, die in Zukunft eine Linux-Option behalten möchten. Und MS ... tisk tisk ... unterstützt Node Cross Platform und dann diesen Junk.
Eric Twilegar
7
Ich stelle nur fest, dass die MS-Treiber zu diesem Zeitpunkt noch ziemlich unausgereift sind und dass der Tedious-Treiber anscheinend besser funktioniert (plattformübergreifend).
Tracker1
4
Ich würde niemandem raten, diese Treiber in ihrem aktuellen Zustand zu verwenden
Christian Westman
53

Die ursprüngliche Frage ist alt und jetzt ist die Verwendung von node-mssql, wie von @Patrik Šimek beantwortet, das Tedious umschließt, wie von @ Tracker1 beantwortet, der beste Weg.

Für den Windows / Azure Node- SQL Server -Treiber, wie in der akzeptierten Antwort erwähnt, müssen Sie eine verrückte Liste von Voraussetzungen installieren: Visual C ++ 2010, SQL Server Native Client 11.0, Python 2.7.x und wahrscheinlich auch Windows 7 SDK für 64-Bit auf Ihrem Computer Server. Sie möchten nicht alle diese GB Software auf Ihrem Windows Server installieren, wenn Sie mich fragen.

Sie möchten wirklich Tedious verwenden . Verwenden Sie aber auch node-mssql , um es zu verpacken und das Codieren erheblich zu vereinfachen.

Update August 2014

  • Beide Module werden weiterhin aktiv gewartet. Probleme werden recht schnell und effizient beantwortet.
  • Beide Module unterstützen SQL Server 2000 - 2014
  • Streaming unterstützt seit node-mssql 1.0.1

Update Februar 2015 - 2.x (stabil, npm)

  • Auf den neuesten Stand von Tedious 1.10 aktualisiert
  • Versprechen
  • Pipe-Anfrage an Objektstrom
  • Detaillierte SQL-Fehler
  • Transaktionsabbruchbehandlung
  • Integrierte Typprüfungen
  • CLI
  • Kleinere Korrekturen

Das ist einfach langweilig :

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);
}

Hier kommt node-mssql, das Tedious als Abhängigkeit hat. Benutze das!

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);
    });
});
Christiaan Westerbeek
quelle
1
Vielen Dank für Ihre hilfreiche Antwort. Anscheinend strebten die Autoren nach einer genauen Nomenklatur, indem sie ihr Paket "Tedious" nannten. Zum Zeitpunkt dieses Beitrags wurde MSNodeSQL auf Github seit etwa 8 Monaten nicht mehr berührt, während diese Lösung zuletzt vor 20 Tagen aktualisiert wurde. Dies scheint derzeit der einzige regelmäßig aktualisierte MS SQL-Treiber von Node.j zu sein.
Conor
23

Kürzlich wurden einige neue SQL Server-Clients von node.js veröffentlicht. Ich habe einen mit dem Namen node-tds geschrieben und einen anderen mit dem Namen langweilig

Chad Retz
quelle
Danke für die Antwort. Ihr Kunde verlässt sich in keiner Weise auf .net. Ist das richtig? Hat das etwas mit dem tds-Projekt von oren mazor zu tun?
Khuram Malik
Mein Kunde ist 100% natives JS (eigentlich CoffeeScript), ebenso wie Tedious. Es hat nichts mit Oren Mazors Projekt zu tun, und wenn ich besser in der Lage gewesen wäre, Bibliotheksnamen zu finden, hätte ich mir etwas Besseres und weniger Zweideutiges ausgedacht.
Chad Retz
@Chad Retz - Dies scheint eine Lösung für ein Projekt zu sein, an dem ich arbeite. Derzeit gibt es einen .Net-Einstiegspunkt über JavaScript, der einen Datenbankaufruf ausführt und JavaScript zurückgibt. Dadurch wird dieser langsamere mittlere Schritt eliminiert. Was ist jedoch mit dem Verbindungspooling, und werden Sie Unterstützung für SQL Server 2008-TVPs schreiben?
ElHaix
9

Sie könnten vielleicht node-tds.js verwenden :

Eine aufregende Implementierung des TDS-Protokolls für node.js, um die Kommunikation mit SQL Server zu ermöglichen ...

VERWENDUNG:

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;");
John Boker
quelle
Genial. Das habe ich vorher nicht gesehen. Ich danke dir sehr.
Khuram Malik
13
Die Projektbeschreibung lautet jetzt*EXPERIMENTAL and currently ABANDONED*
Factor Mystic
Dieses alternative Github-Projekt könnte von Nutzen sein, bis die MS offizielle Unterstützung hinzufügen. github.com/vivina/node-mssql
booyaa
8

Es gibt ein anderes Modul, das Sie verwenden können - node-mssql . Es verwendet andere TDS-Module als Treiber und bietet eine benutzerfreundliche einheitliche Schnittstelle. Außerdem werden zusätzliche Funktionen und Fehlerbehebungen hinzugefügt.

Zusätzliche Funktionen:

  • Einheitliche Schnittstelle für mehrere MSSQL-Treiber
  • Verbindungspooling mit Transaktionen und vorbereiteten Anweisungen
  • Parametrisierte gespeicherte Prozeduren für alle Treiber
  • Serialisierung von Geographie- und Geometrie-CLR-Typen
  • Smart JS-Datentyp zu SQL-Datentyp-Mapper
  • Unterstützt sowohl Versprechen als auch Standardrückrufe
Patrik Šimek
quelle
7

(Duplizieren meiner Antwort von einer anderen Frage).

Ich würde node-mssql empfehlen , das ein netter Wrapper für andere Konnektoren ist. Die Standardeinstellung ist meine vorherige Wahl ( Tedious ), die eine etwas schönere Schnittstelle bietet. Dies ist eine JavaScript-Implementierung ohne Kompilierungsanforderungen. Dies bedeutet, dass Sie in Windows- und Nicht-Windows-Umgebungen gleichermaßen arbeiten können.

Eine weitere Option, wenn Sie nicht in .NET oder Mono mit einer binären Brücke bringen nichts dagegen wäre zu verwenden edge.js . Das kann sehr schön sein, wenn Sie .NET-Bibliotheken in node.js nutzen möchten

node-tds wird aufgegeben, node-odbc funktioniert nicht mit Windows und der MS node-sqlserver- Treiber scheint nicht unter Nicht-Windows zu funktionieren (und hat einige doofe Anforderungen).

Tracker1
quelle
5

TSQLFTW - T-SQL für den WIN (dows) - von Fosco Marotto https://github.com/gfosco/tsqlftw

Es handelt sich um eine verwaltete C # - und ADO .NET-Codelösung mit einem C ++ - Wrapper, mit dem Node.js importieren und arbeiten kann.


Wenn Sie .NET kennen, können Sie WCF Data Services (ADO.NET Data Services) ausprobieren. Schreiben Sie eine WCF-App für den Datenzugriff und verwenden Sie Odata (REST für Steroide), um mit der Datenbank zu interagieren


Wenn Sie sich für SOA interessieren und SQL Server 2005 verwenden, können Sie die nativen XML-Webdienste für Microsoft SQL Server 2005 überprüfen

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

Sie können als Webdienst (HTTP, SOAP) auf SQL Server zugreifen.

Jeno Laszlo
quelle
2

Wenn Sie unter .NET einen Blick auf entityspaces.js at werfen, erstellen wir ein vollständiges universelles ORM für Node.js, für das kein WCF-JSON-Dienst erforderlich ist ... https://github.com/EntitySpaces/entityspaces.js

Wenn Sie die MSFT-Backend-Technologie verwenden, können Sie sie jetzt verwenden. Wir erstellen jedoch ein universelles ORM für Node.js und werden in Kürze weitere Informationen dazu erhalten

Mike Griffin
quelle
2

Es gibt ein Update von Microsoft. Hier ist eine Reihe von Blog-Posts ( Teil 1 und Teil 2 ).

user1467882
quelle
2

Ich würde vorschlagen, einen Blick auf Prisma zu werfen . Wir haben gerade (Oktober 2020) die Unterstützung der Vorschau für SQL Server angekündigt .

Prisma ist ein ORM, bei dem der Schwerpunkt auf Typensicherheit und Entwicklererfahrung liegt. Im Gegensatz zu herkömmlichen ORMs, die Tabellen normalerweise Klassen zuordnen, ordnet Prisma Abfragen Typen zu (in TypeScript) und gibt einfache Objekte aus Abfragen zurück.

Um mit Prisma und SQL Server zu beginnen, lesen Sie dieses Beispiel und beginnen Sie mit der Anleitung in den Dokumenten .

Daniel
quelle
1

Die SQL Server-Treiber von Node.j scheinen sehr unausgereift zu sein - es gibt eine Mischung aus verschiedenen Projekten mit unterschiedlichen Abhängigkeiten, Leistungen und Vollständigkeitsgraden, von denen keines Vertrauen schafft.

Ich würde vorschlagen, edge-sql zu verwenden . Dies nutzt das ausgereifte Datenbank-Ökosystem von .NET und hängt nur von .NET ab (ein Kinderspiel, wenn Sie Node unter Windows ausführen - wenn nicht, gibt es Mono , aber das habe ich nicht versucht).

Hier ist ein Knotenbeispiel (server.js), das Edge-SQL verwendet (beachten Sie, dass Sie Ihre Verbindungszeichenfolge gemäß Edge-SQL-Dokumenten in eine Umgebungsvariable einfügen müssen):

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);
});

Sie können Edge.js auch mit .NET nutzen, um auf andere Datenbanken wie Oracle zuzugreifen. Ich habe ein Beispiel für diesen Ansatz gegeben hier .

Saille
quelle
0

Der Status ab Mai 2016 lautet wie folgt.

Der offizielle Microsoft SQL-Treiber für Node mit dem Namen node-sqlserver wurde seit einigen Jahren nicht mehr aktualisiert.

Es gibt eine neue Verzweigung namens node-sqlserver-v8 , die mit Node Versions 0.12.x funktioniert. und> = 4.1.x. Dieser Fork verfügt auch über vorkompilierte Binärdateien für x64- und x86-Ziele.

Das Paket ist auf NPM als msnodesqlv8 verfügbar .

Ich empfehle dieses Paket, da es leichtgewichtig ist (keine Abhängigkeiten aufweist) und das einzige ist, das mit allen neueren Versionen von SQL Server, einschließlich SQL LocalDB, funktioniert.

Noel Abrahams
quelle
0

Jetzt (2016) können Sie Sequelize ORM verwenden, das Folgendes unterstützt:

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

Es ist weit verbreitet nach seinen Github-Sternen .

Supersharp
quelle
-3

Dieser Link beschreibt nur eine SQL 2000-Lösung, nicht SQL 2005 oder SQL 2008, und dieser Code erlaubt nur das Senden von SQL-Text und erlaubt nicht die Ausführung gespeicherter Prozeduren.

Die eigentliche Lösung wäre, den Knoten JS auf einem Linux-Server oder auf einem virtuellen Linux-Server auf einem Windows-Computer zu installieren. Gehen Sie dann zur Microsoft-Website, laden Sie die JDBC-Java-Treiber herunter und installieren Sie diese Microsoft MS SQL Java-JDBC-Treiber auf einem der beiden Linux-Server oder virtueller Linux-Server.

Barry
quelle
Ich bin nicht besonders vertraut mit Linux, also versuche ich, so wenig Systemadministrator wie möglich zu machen. Das Ausführen eines JDBC-Setups klingt chaotisch, und wenn ein Knotentreiber als Modul verfügbar ist, wird das Leben so viel einfacher. Sie haben Recht, dass es nicht großartig ist, keine Unterstützung für gespeicherte Prozeduren zu haben.
Khuram Malik
1
Diese Treiber sind jedoch nur für Java. Wie würden Sie JDBC in NodeJS verwenden?
Alba Mendez
Ich habe es nicht getestet, aber es gibt Node-JDBC .
Beau