Node.js和Microsoft SQL Server

Khu*_*lik 69 sql-server node.js node-mssql tedious

有什么方法可以让我的Node.js应用程序与Microsoft SQL通信?我没有在野外看到任何MS SQL驱动程序?

我将一个非常简单的应用程序放在一起,需要能够与现有的MS SQL数据库进行通信(否则我会使用mongoDB或Redis)

Chr*_*eek 50

最初的问题是旧的,现在使用node-mssql作为@PatrikŠimek的答案,包装Tedious,因为@ Tracker1回答是最好的方法.

接受的答案中提到的Windows/Azure node-sqlserver驱动程序要求您安装一个疯狂的先决条件列表:Visual C++ 2010,SQL Server Native Client 11.0,python 2.7.x以及可能还有64位的Windows 7 SDK服务器.如果您问我,您不希望在Windows Server上安装所有这些GB的软件.

你真的想要使用Tedious.而且使用node-mssql来包装它并使编码更容易.

2014年8月更新

  • 这两个模块仍然在积极维护.问题得到迅速有效的回应.
  • 这两个模块都支持SQL Server 2000 - 2014
  • 从node-mssql 1.0.1开始支持流式传输

2015年2月更新 - 2.x(稳定,npm)

  • 已更新至最新的Tedious 1.10
  • 承诺
  • 管道对象流的请求
  • 详细的SQL错误
  • 交易中止处理
  • 综合类型检查
  • CLI
  • 小修正

这是明显的繁琐:

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);
}
Run Code Online (Sandbox Code Playgroud)

这里有node-mssql,它具有Tedious作为依赖.用这个!

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);
    });
});
Run Code Online (Sandbox Code Playgroud)


Cha*_*etz 23

最近刚刚发布了几个新的node.js SQL服务器客户端.我写了一个名为node-tds的文章,还有另一个名为tedious的文章


小智 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

  • 只是注意到MS驱动程序在这一点上还不成熟,并且Tedious驱动程序似乎工作得更好(跨平台). (7认同)
  • 目前这只是Windows.我想大多数人使用SQL Server或Azure无论如何都是Windows人员,但是有很多人只是将他们现有的系统深入到SQL Server世界.下面提到跨平台ODBC的用户,以便那些可能希望在将来保留Linux选项的用户.和MS ... tisk tisk ...支持节点跨平台然后这个垃圾. (4认同)
  • 我不建议任何人在当前状态下使用这些驱动程序 (4认同)
  • @Rachael,看看我今天发布的答案.如果您在Windows上运行Node,则接受的答案不是最佳解决方案. (2认同)

Joh*_*ker 10

你可以使用node-tds.js:

node.js的TDS协议令人兴奋的实现,允许与sql server通信...

用法:

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;");
Run Code Online (Sandbox Code Playgroud)

  • 项目描述现在显示为"*EXPERIMENTAL且当前已放弃*" (12认同)

Pat*_*mek 8

您可以使用另一个模块 - node-mssql.它使用其他TDS模块作为驱动程序,并提供易于使用的统一界面.它还添加了额外的功能和错误修复.

额外功能:

  • 多个MSSQL驱动程序的统一接口
  • 与事务和准备语句的连接池
  • 所有驱动程序的参数化存储过程
  • 地理和几何CLR类型的序列化
  • Smart JS数据类型为SQL数据类型映射器
  • 支持Promises和标准回调


Tra*_*er1 7

(从另一个问题复制我的答案).

我建议使用node-mssql,这是其他连接器的一个很好的包装器,默认是我之前的选择(Tedious)带来更好的接口.这是一个JavaScript实现,没有编译要求,这意味着您可以在Windows和非Windows环境中工作.

另一种选择,如果你不介意引进.NET或单用二进制桥是使用edge.js.如果你想在node.js中利用.Net库,这可能会非常好

node-tds被放弃了,node-odbc不能用于windows,而MS node-sqlserver驱动程序似乎不适用于非windows(并且有一些愚蠢的要求).


Jen*_*zlo 5

TSQLFTW - T-SQL for WIN(dows) - 作者:Fosco Marotto https://github.com/gfosco/tsqlftw

它是一个C#和ADO .NET托管代码解决方案,具有Node.js可以导入和使用的C++包装器.


如果您了解.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)访问