Node.js和Microsoft SQL Server


70

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

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



我确实搜索了“ node.js SQL Server”和该字符串的变体,但没有找到任何答案。
Khuram Malik'3

您可以尝试Prisma作为ORM :)
nburk

Answers:


22

我们刚刚发布了用于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


4
目前仅是Windows。我想大多数使用SQL Server或Azure的人还是Windows专家,但是有很多人只是将他们的现有系统深入到SQL Server世界中。下面为那些将来可能希望保留Linux选项的用户提到了跨平台ODBC的用户。MS ... tisk tisk ...支持节点跨平台,然后是垃圾。
埃里克·特威格

7
只是要注意,MS驱动程序在这一点上还很不成熟,而且Tedious驱动程序似乎工作得更好(跨平台)。
Tracker1 2012年

4
我不建议任何人在当前状态下使用这些驱动程序
Christian Westman 2013年

53

原来的问题是旧的,现在使用节点MSSQL由@Patrik西梅克一个包装作为回答繁琐由@ 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
  • 从节点mssql 1.0.1开始支持流

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

  • 更新到最新的Tedious 1.10
  • 承诺
  • 管道请求到对象流
  • 详细的SQL错误
  • 事务中止处理
  • 集成类型检查
  • 命令行界面
  • 次要修复

这是明显的繁琐

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

这是将Tedious作为依赖项的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
感谢您的帮助。看起来作者通过将其程序包命名为“ Tedious”来争取准确的命名法。在撰写本文时,大约8个月没有触及github上的MSNodeSQL,而此解决方案的最新更新时间是20天前。这似乎是当前唯一定期更新的Node.js MS SQL驱动程序。
2014年

23

最近刚刚发布了几个新的node.js SQL Server客户端。我写了一个叫做node-tds的东西,还有另一个叫做乏味的


感谢您的回复。您的客户不以任何方式依赖.net,对吗?这与oren mazor的tds项目有什么关系吗?
Khuram Malik

我的客户和Tedious是100%本机JS(实际上是CoffeeScript)。它与Oren Mazor的项目没有任何关系,如果我能更好地提出库名,那会想到更好而又不那么模棱两可的东西。
乍得·雷斯

@Chad Retz-看来这可能是我正在从事的项目的解决方案。当前,通过JavaScript有一个.Net入口点,它可以进行数据库调用并返回JavaScript。这将消除较慢的中间步骤。但是,连接池又如何呢?您将编写对SQL Server 2008 TVP的支持吗?
ElHaix'3

9

您可以使用node-tds.js

TDS协议对node.js的令人兴奋的实现,以允许与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;");

太棒了 我以前没有看到。非常感谢。
Khuram Malik'3

13
该项目的描述现在显示为*EXPERIMENTAL and currently ABANDONED*
Factor Mystic,

在MS添加官方支持之前,这个替代的github项目可能会有用。github.com/vivina/node-mssql
booyaa 2011年

8

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

额外功能:

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

7

(将我的回答与另一个问题重复)。

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

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

node-tds被放弃,node-odbc无法在Windows上运行,并且MS node-sqlserver驱动程序似乎无法在非Windows上运行(并且有一些愚蠢的要求)。


5

TSQLFTW-WIN(Dows)的T-SQL-作者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的本机XML Web服务。

http://msdn.microsoft.com/zh-CN/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,并将很快获得更多信息。



2

我建议看一看Prisma。我们刚刚(2020年10月)宣布了对SQL Server的预览支持。

Prisma是一个ORM,它强调类型安全和开发人员经验。与通常将表映射到类的传统ORM不同,Prisma将查询映射到类型(在TypeScript中)并从查询中返回普通对象。

要开始使用Prisma和SQL Server,请查看此示例,从文档中的新手指南开始


1

Node.js SQL Server驱动程序似乎还很不成熟-杂乱无章的项目由不同的依赖项,性能和完整性级别组成,但都没有激发信心。

我建议使用edge-sql。这利用了.NET成熟的数据库驱动程序生态系统,并且仅依赖于.NET(如果您正在Windows上运行节点,那么就不费吹灰之力了-如果没有Mono,但我还没有尝试过)。

这是一个使用edge-sql的节点示例(server.js)(请注意,您需要根据edge-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);
});

您还可以将Edge.js与.NET结合使用来访问其他数据库,例如Oracle。我在这里举例说明了这种方法。


0

截至2016年5月的状态如下。

官方的名为Node-sqlserver的Node的Microsoft SQL驱动程序多年未更新。

节点上有一个名为node-sqlserver-v8的新叉子,可与Node Versions 0.12.x一起使用。和> =4.1.x。该fork还具有针对x64和x86目标的预编译二进制文件。

该软件包在NPM上以msnodesqlv8的形式提供

我建议使用此软件包,因为它是轻量级的(没有依赖项),并且是唯一可与所有最新版本的SQL Server(包括SQL LocalDB)一起使用的软件包。



-3

该链接仅详细说明了sql 2000解决方案,而不详细说明sql 2005和sql 2008,并且该代码仅允许发送sql文本,并且不允许执行存储过程。

真正的解决方案是在Windows服务器上的linux服务器上或虚拟linux服务器上安装节点JS,然后转到Microsoft网站并下载JDBC Java驱动程序,然后在其中一个上安装这些microsoft ms sql java jdbc驱动程序。 linux服务器或linux虚拟服务器。


我对Linux不太满意,所以我尝试做尽可能少的sys admin。进行JDBC设置听起来很麻烦,并且如果有可用的节点驱动程序作为模块,那么会使生活变得更加轻松。您没有存储过程支持不是很好,这是正确的。
Khuram Malik 2011年

1
但是这些驱动程序仅适用于Java。您将如何在NodeJS中使用JDBC?
阿尔巴·门德斯

还没有测试过,但是有node-jdbc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.