2011-03-01 70 views
67

有什麼辦法可以讓我的Node.js應用程序與Microsoft SQL進行通信? 我還沒有看到任何MS SQL驅動程序在野外?Node.js和Microsoft SQL Server

我把一個非常簡單的應用程序一起,需要能夠與現有的MS SQL數據庫(否​​則我會去用的MongoDB或Redis的)通信

+0

類似於這個問題http://stackoverflow.com/questions/4728385/connecting-to-a-remote-microsoft-sql-server-from-node-js – 2011-03-01 15:52:32

+0

我沒有搜索「node.js SQL服務器「和該字符串的變體,但沒有找到任何答案。 – 2011-03-01 16:35:13

回答

21

的更多信息,我們剛剛發佈了用於SQL Server連接的Node.JS預覽驅動程序。你可以在這裏找到它們: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx

+0

這不是npm,對不對?你打算把它放在那裏嗎? – NicoGranelli 2012-06-11 23:07:48

+1

我上週:) http://search.npmjs.org/#/node-sqlserver – kop48 2012-06-14 17:10:22

+4

這是僅適用於Windows的時刻加入它NPM。我想大多數使用SQL Server或Azure的人都是windows的人,但有很多人只是將他們現有的系統深入SQL Server世界。以下提到跨平臺ODBC的用戶可能希望在將來保留Linux選項的用戶。和MS ... tisk tisk ...支持節點跨平臺,然後這個垃圾。 – 2012-09-03 04:03:27

10

也許你可以使用node-tds.js

一個令人興奮的執行情況的node.js允許與SQL Server通信TDS協議的...

用法:

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;"); 
+0

太棒了。我以前沒有看到。非常感謝。 – 2011-03-01 16:34:43

+12

項目說明現在讀取'*實驗,目前廢棄*' – 2011-10-05 17:40:18

+0

這種替代GitHub的項目可能是有用的,直到MS加官方支持。 https://github.com/vivina/node-mssql – booyaa 2011-12-02 16:19:54

-3

鏈接詳細信息只有一個SQL 2000解決方案,而不是SQL 2005或SQL 2008,並且該代碼只允許發送SQL文本,並且不允許執行存儲過程。

真正的解決方案是在linux服務器上安裝節點JS,或者在Windows機器上的虛擬Linux服務器上安裝節點JS,然後轉到Microsoft網站並下載JDBC java驅動程序並安裝那些microsoft ms sql java jdbc在Linux服務器或linux虛擬服務器上的驅動程序。

+0

我不是特別舒服使用Linux,所以我嘗試做盡可能少的系統管理員越好。做一個JDBC安裝聽起來很麻煩,如果有一個節點驅動程序作爲一個模塊使用,將使生活變得如此簡單。沒錯,沒有存儲過程的支持並不好。 – 2011-09-01 11:00:48

+1

但是這些驅動程序僅適用於Java。你將如何在NodeJS中使用JDBC? – 2012-05-31 11:45:46

+0

沒有測試它,但有[節點-JDBC(https://github.com/CraZySacX/node-jdbc)。 – Beau 2013-07-10 23:06:43

24

最近剛剛發佈了一對新的node.js SQL服務器客戶端。我寫了一個叫node-tds,有一種叫tedious

+0

感謝您的回覆。你的客戶不以任何方式依賴.net,這是否正確?這與oren mazor的tds項目有什麼關係? – 2012-01-06 11:55:59

+0

我的客戶是100%原生的JS(實際上是CoffeeScript),這很枯燥。這與Oren Mazor的項目沒有任何關係,而且我更願意提供圖書館名稱,會想到更好,更不明確的東西。 – 2012-01-09 18:35:37

+0

@Chad Retz - 這看起來像一個這可能是我正在工作的項目的解決方案。目前有一個通過JavaScript進行數據庫調用並返回JavaScript的.Net入口點。這將消除較慢的中間步驟。但是,連接池怎麼樣,你會爲SQL Server 2008 TVP編寫支持嗎? – ElHaix 2012-03-02 02:14:05

5

TSQLFTW - T-SQL爲贏(DOWS) - 由Fosco Marotto https://github.com/gfosco/tsqlftw

這是一個C#和ADO .NET託管代碼的解決方案,具有C++包裝,Node.js可以導入和使用。


如果你知道.NET你可以嘗試WCF數據服務(ADO.NET數據服務);寫數據訪問的WCF應用程序和使用的OData(類固醇REST)與數據庫


如果你到SOA和使用SQL Server 2005,您可以查看Microsoft SQL Server 2005的Native XML Web Services

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

你可以訪問SQL Server作爲Web服務(HTTP,SOAP)

2

如果您在.NET看看entityspaces.js的,我們正在創建的Node.js整個通用ORM運行,不會需要一個WCF JSON服務... https://github.com/EntitySpaces/entityspaces.js

如果您正在使用MSFT後端技術,你可以現在使用它,但是,我們正在創建一個通用的Node.js ORM,並將對不久

7

(複製從另一個問題,我的答案)。

我會推薦node-mssql,這是一個很好的包裝其他連接器,默認是我以前的選擇(Tedious)帶來了一個更好的接口。這是一種JavaScript實現,沒有編譯要求,這意味着您可以在Windows和非Windows環境中工作。

另一種選擇,如果你不介意引進.NET或單用二進制橋是使用edge.js。這是非常好的,如果你想利用.NET庫中的node.js

node-tds被放棄,node-odbc不工作與Windows和MS node-sqlserver司機似乎並沒有在非Windows的工作(和有一些愚蠢的要求)。

8

有可以使用另一個模塊 - node-mssql。它使用其他TDS模塊作爲驅動程序,並提供易於使用的統一界面。它還增加了額外的功能和錯誤修復。

額外的功能:

  • 多個MSSQL司機
  • 連接與事務處理和預處理語句集中統一的接口
  • 參數化存儲過程的所有驅動程序
  • 序列化地理幾何CLR類型
  • 智能JS數據類型爲SQL數據類型映射器
  • 同時支持承諾和標準的回調
44

原來的問題是舊的,現在用node-mssql通過@Patrik西梅克一個封裝Tedious通過@作爲回答Tracker1是最好的方式去作爲回答。

在接受的答案中提到的Windows/Azure node-sqlserver driver要求您安裝一個瘋狂的先決條件列表:Visual C++ 2010,SQL Server Native Client 11.0,python 2.7.x,也可能還包括Windows 7 SDK(適用於您的服務器上的64位)。如果你問我,你不想在Windows服務器上安裝所有這些GB的軟件。

你真的想用Tedious。但是使用node-mssql包裝它,使編碼更容易。

更新2014年8月

  • 兩個模塊仍在積極維護。問題得到快速有效的迴應。
  • 兩個模塊都支持SQL Server 2000年至2014年
  • 因爲節點MSSQL流支持1.0.1

更新2015年2月 - 2.x的(穩定,NPM)

  • 更新到最新的繁瑣1.10
  • 承諾
  • 管請求到對象流
  • 詳細SQL錯誤
  • 事務中止處理
  • 集成類型檢查
  • CLI
  • 小幅修正

這是純Tedious

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

這裏談到node-mssql具有乏味作爲依賴。用這個!

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

感謝您的有用答案。看起來作者通過命名他們的軟件包「乏味」來爭取準確的命名法。在這篇文章發佈時,github上的MSNodeSQL在大約8個月內沒有被觸及,而這個解決方案是在20天前更新的。這似乎是目前唯一定期更新的Node.js MS SQL驅動程序。 – Conor 2014-03-31 16:24:13

+0

謝謝Chris,很好的回答。我必須問,爲什麼你提到Tedious/node-mssql是特別在Windows上的最佳方式?這兩個模塊都是用純javascript編寫的,並且應該可以在所有可以運行nodejs的系統上運行。 – 2014-04-04 12:12:30

+0

@PatrikŠimek謝謝。我更新了答案,提到兩者都是純Javascript,這是爲什麼在Windows上使用它們的原因。我認爲這就是你的意思。 – 2014-04-11 13:32:27

1

的Node.js的SQL Server驅動程序顯得很不成熟 - 有不同的項目有不同的依賴性,性能和完備的水平,其中沒有激發信心大雜燴。

我會建議使用edge-sql。這充分利用了.NET成熟的數據庫驅動程序生態系統,並且僅依賴於.NET(如果您在Windows上運行節點,則無需考慮) - 如果不存在Mono,但我沒有嘗試過)。

下面是使用邊緣-SQL節點實例(server.js)(注意,你需要把你的連接字符串到環境變量按照邊緣-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); 
}); 

您還可以利用使用.NET訪問其他數據庫(如Oracle)。我已經給出了這種方法的一個例子here

0

截至2016年5月的狀態如下。

Node的官方Microsoft SQL驅動程序node-sqlserver尚未更新多年。

這個名爲node-sqlserver-v8的新叉與節點版本0.12.x協同工作。和> = 4.1.x.該分支還爲x64和x86目標提供了預編譯的二進制文件。

該軟件包可在NPM上獲得,如msnodesqlv8

我推薦這個包,因爲它是輕量級的(沒有依賴性),它是與所有新版本的SQL Server,包括SQL的LocalDB唯一可行的。

0

現在(2016),可以使用Sequelize ORM支持:

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

它被廣泛應用於根據its Github's stars