2012-11-21 120 views
9

我有一個完美的Node.js項目,但它必須連接到ODBC數據庫,它必須在Windows上運行。我在linux上看到nodejs的ODBC模塊,但沒有看到windows。有沒有人有任何建議如何做到這一點?在Windows上的Nodejs ODBC連接

+0

嗯,我有我自己的程序在Visual C++中,並將其添加爲node.js插件。它現在工作正常。 – Clint

+1

我認爲編寫你正在尋找的附加程序可以讓你給自己一個答案和一個無恥的插件以及一個鏈接到附加組件。 –

+0

哈哈,也許你是對的Erik,但是現在插件非常糟糕,我不想擁有它。我的C++技能非常糟糕。更糟糕的是,它最終不是異步的,這實際上挫敗了我的觀點。我結束了使用Python在Windows上具有良好的odbc支持:-) – Clint

回答

-9

NodeJS有一些潛力,但它仍然是一個玩具。前端程序員和後端程序員可以互換的想法是可笑的。但這是題外話...

微軟released自己的驅動程序。我沒有嘗試過,所以我不知道它們有多好。我想他們肯定有點不錯,因爲我在過去的8個月裏看到過多次針對NodeJS程序員的招聘信息。 (也不響應)。

+1

該鏈接是本機SQL Server驅動程序,而不是Windows的通用ODBC驅動程序(它似乎不存在)。 – JohnnyHK

+1

雖然node.js仍然是一個玩具,但它現在適合一個很好的用例。暴露Web api的數據庫封裝器。它從頭開始設計爲異步,並且已經在大型生產應用程序中。這是一篇較舊的文章:http://blog.appfog.com/node-js-is-taking-over-the-enterprise-whether-you-like-it-or-not/ – Clint

+1

你從未見過任何人可以處理兩者? –

1

我剛剛開始node.js,生病了csript.exe是主要原因。 這是該死的強大,而且非常令人印象深刻,花了我1小時建立一個完整的功能的整個網格。那麼我不是在這裏推廣node.js,我很喜歡它。 我找出但是一些非常有用... http://syskall.com/how-to-write-your-own-native-nodejs-extension/

因此,而不是重做什麼C++總是會做的更好,我同時使用的Node.js和C++實現最大效率的方式。

+0

鏈接不可用? – ChristianNRW

4

如果你和我一樣從Google來到這裏,因爲你有舊的系統,所以我遇到了Is it possible to marry WSH (wscript) with nodejs,並提醒npm模塊「win32ole」:https://www.npmjs.com/package/win32ole

雖然不僅僅是一個ODBC解決方案,「win32ole」確實能讓你在windblows盒子上做很多事情,就像老式的WSH一樣。

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

如果(像我一樣),你是一個ODBC連接後,因爲要連接到一個Access數據庫,然後甚至有一個示例腳本直接使用Jet連接:

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

編輯:它確實需要一個node-gyp,一個需要將代碼編譯爲本機的模塊...

2

與強大且性能卓越的數據庫驅動程序相比,Windows上node.js的數據庫驅動程序狀態似乎有些不成熟已經有了在ADO.NET多年。

我會認真考慮使用Edge來調用C#或一個CLR程序集進程來訪問你的數據庫。您可以在C#中編寫Repository樣式的數據訪問層,並從node.js中調用它。

我已經證明這可以在C#,PetaPoco(可選),.NET 4.5和Oracle ODP驅動程序(Oracle.DataAccess.dll)以及ADO.NET + SQL Server的開發環境中使用。這應該適用於任何可以在.NET中使用的數據庫。

節點(server.js)爲例來調用.NET CLR函數:

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#看起來是這樣的(注意,你需要把你的連接字符串中node.exe.config包含的文件夾中node.exe):

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

或者,如果使用SQL Server,則可以使用edge-sql

節點例如使用邊緣-SQL(注意,你需要把你的連接字符串到環境變量按照邊緣-SQL文檔)(server.js):

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