2012-11-21 4 views
9

Ich habe ein Projekt, das perfekt für Node.js wäre, aber es muss eine Verbindung zu einer ODBC-Datenbank herstellen und es muss unter Windows ausgeführt werden. Ich sehe ODBC-Module für Nodejs unter Linux, aber nicht Windows. Hat jemand Vorschläge, wie man das macht?Nodejs ODBC-Verbindung unter Windows

+0

Nun, ich hatte meine eigenen zu programmieren in Visual C++ und fügen Sie es als ein node.js Addon hinzu. Es funktioniert jetzt gut. – Clint

+1

Ich denke, das Schreiben des Add-ons, das du suchst, berechtigt dich dazu, dir selbst die Antwort zu geben und einen Scham-freien Stecker mit einem Link zum Add-on. –

+0

Ha ha, vielleicht hast du Recht Erik, aber das Addon ist so beschissen, dass ich es jetzt nicht besitzen möchte. Meine C++ Fähigkeiten sind ziemlich schlecht. Und noch schlimmer, es endete nicht asynchron, was wirklich meinen Punkt besiegte. Ich endete mit Python, die große odbc-Unterstützung unter Windows hat :-) – Clint

Antwort

-9

NodeJS hat ein gewisses Potenzial, ist aber immer noch ein Spielzeug. Die Idee, dass ein Frontend-Programmierer und ein Backend-Programmierer austauschbar sind, ist lächerlich. Aber das ist off topic ...

Microsoft released ihre eigenen Treiber (s). Ich habe sie nicht ausprobiert, also habe ich keine Ahnung, wie gut sie sind. Ich stelle mir vor, dass sie etwas gut sein müssen, da ich in den letzten 8 Monaten mehrere Stellenausschreibungen für NodeJS-Programmierer gesehen habe. (auch nicht ansprechend).

+1

Dieser Link ist auf den nativen SQL Server-Treiber, nicht ein generischer ODBC-Treiber für Windows (die nicht zu existieren scheint). – JohnnyHK

+1

Während node.js immer noch ein Spielzeug ist, passt es jetzt in einen großen Anwendungsfall. DB-Wrapper, der eine Web-API freigibt. Es wurde von Grund auf asynchron entwickelt und ist bereits in großen Produktions-Apps enthalten. Hier ist ein älterer Artikel: http://blog.appfog.com/node-js-is-taking-over-the-enterprise-wherher-you-like-it-or-not/ – Clint

+1

Sie haben noch nie jemanden getroffen Könnte beides umgehen? –

1

Ich beginne node.js, war krank von csript.exe ist der Hauptgrund. Es ist verdammt kraftvoll, und sehr beeindruckend, nahm mich 1h, um ein ganzes Gitter voll funktionsfähig einzurichten. Nun, ich bin nicht hier, um node.js zu promoten, ich bin noob dran. aber etwas sehr nützlich ich herausfinden, ... http://syskall.com/how-to-write-your-own-native-nodejs-extension/

Also anstatt redoing was C++ wird immer besser, verwende ich beide node.js und C++ für maximale Effizienz, die Art und Weise.

+0

Link nicht verfügbar? – ChristianNRW

4

Wenn Sie wie ich und kamen hier von Google, weil man alt ist (dh alten) -Systeme hat, stieß ich auf Is it possible to marry WSH (wscript) with nodejs und wurde die npm Modul „WIN32OLE“ aufmerksam gemacht: https://www.npmjs.com/package/win32ole.

Obwohl es nicht nur eine ODBC-Lösung ist, gibt "win32ole" Ihnen die Möglichkeit, ziemlich viel auf einer Windblas-Box zu tun, genau wie die alte WSH.

var win32ole = require('win32ole'); 
. . . 
// Create an ADODB.Connection Object 
dbcon = new ActiveXObject('ADODB.Connection'); 

Wenn (wie ich), die Sie nach einer ODBC-Verbindung, weil Sie zu einem Access DB sie verbinden, dann gibt es auch einen Beispielskript direkt mit Jet zu verbinden:

https://github.com/idobatter/node-win32ole/blob/master/examples/access_mdb_sample.js

Edit: Es erfordert ein Node-Gyp, ein Modul, das Build-Code zu nativen ...

2

Der Zustand der Datenbanktreiber für node.js unter Windows scheint etwas unausgereift im Vergleich zu den robusten und hoch performanten Datenbanktreibern wir habe zur Verfügung gehabt in ADO.NET seit Jahren.

Ich würde ernsthaft in Betracht ziehen, mit Edge C# oder eine CLR-Assembly in Bearbeitung für den Zugriff auf Ihre Datenbank aufzurufen. Sie könnten eine Datenzugriffsschicht Repository in C# schreiben und von node.js aus aufrufen.

Ich habe bewiesen, dass dies in einem Entwicklungskontext mit C#, PetaPoco (optional), .NET 4.5 und dem Oracle ODP-Treiber (Oracle.DataAccess.dll) und mit ADO.NET + SQL Server funktioniert. Dies sollte mit jeder Datenbank funktionieren, mit der Sie in .NET kommunizieren können.

Node (server.js) Beispiel .NET CLR-Funktion aufzurufen:

var edge = require('edge'); 

// define CLR function proxy 
var getData = edge.func({ 
    assemblyFile: '../Repositories/bin/Debug/Repositories.dll', 
    typeName: 'Repositories.TestRepository', 
    methodName: 'GetData' // This must be Func<object,Task<object>> 
}); 

// call proxy function 
getData({ myParam:1 }, function (error, result) { 
    if (error) throw error; 
    console.log(result); 
}); 

GetData C# sieht wie folgt aus (beachten Sie die Verbindungszeichenfolge in node.exe.config im Ordner setzen müssen, die enthält node.exe):

public async Task<object> GetData(object param) 
    { 
     using (var db = new Database("NameOfConnString")) 
     { 
      return db.Fetch<dynamic>("SELECT * FROM sometable"); 
     } 
    } 

Alternativ kann, wenn SQL Server verwenden, können Sie edge-sql verwenden.

Knoten Beispiel (server.js) mit kanten SQL (beachten Sie per Edge-SQL-docs Verbindungszeichenfolge in eine Umgebungsvariable setzen 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); 
});