71

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

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

4

15 回答 15

58

最初的问题很老,现在使用@Patrik Šimek 回答的node-mssql包装了@ Tracker1回答的Tedious 是最好的方法。

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

您真的想使用Tedious。但也可以使用node-mssql来包装它,让编码更容易。

2014 年 8 月更新

  • 这两个模块仍在积极维护中。问题得到快速有效的响应。
  • 两个模块都支持 SQL Server 2000 - 2014
  • 自 node-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);
}

这里出现了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);
    });
});
于 2014-03-26T10:43:56.260 回答
23

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

于 2012-01-06T06:34:08.060 回答
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

于 2012-06-07T23:00:50.493 回答
9

您也许可以使用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;");
于 2011-03-01T15:53:08.797 回答
9

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

我会推荐node-mssql,它是其他连接器的一个很好的包装器,默认是我之前的选择(Tedious),它带来了更好的界面。这是一个 JavaScript 实现,没有编译要求,这意味着您可以在 Windows 和非 Windows 环境中工作。

另一种选择是,如果您不介意引入带有二进制桥的 .Net 或 Mono,则可以使用edge.js。如果您想利用 node.js 中的 .Net 库,这会非常好

node-tds已被废弃,node-odbc不适用于 Windows,MS node-sqlserver驱动程序似乎不适用于非 Windows(并且有一些愚蠢的要求)。

于 2012-12-04T22:22:37.433 回答
9

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

额外功能:

  • 多个 MSSQL 驱动程序的统一接口
  • 使用 Transactions 和 Prepared statements 进行连接池
  • 所有驱动程序的参数化存储过程
  • Geography 和 Geometry CLR 类型的序列化
  • 智能 JS 数据类型到 SQL 数据类型映射器
  • 支持 Promise 和标准回调
于 2013-12-12T01:43:49.347 回答
5

TSQLFTW - T-SQL For The 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)访问

于 2012-01-06T13:03:14.317 回答
4

Microsoft(Windows Azure 团队)刚刚发布了 SQL SERVER 的节点驱动程序。

据我所知,它没有用于 npm yert 的软件包,但它是开源的。并接受社区贡献。

https://github.com/WindowsAzure/node-sqlserver

简介博文在这里:

http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx

于 2012-06-08T15:03:14.310 回答
3

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

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

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

于 2020-11-02T08:54:49.003 回答
2

如果您在 .NET 上运行,请查看 entityspaces.js,我们正在为不需要 WCF JSON 服务的 Node.js 创建一个完整的通用 ORM ... https://github.com/EntitySpaces/entityspaces.js

如果您正在使用 MSFT 后端技术,您现在可以使用它,但是,我们正在创建一个通用的 Node.js ORM,很快就会有更多信息

于 2012-01-25T16:29:28.000 回答
2

有来自 Microsoft 的更新。这是一系列博客文章(第 1部分和第 2 部分)。

于 2012-06-20T22:09:02.513 回答
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);
});

您还可以利用带有 .NET 的Edge.js来访问其他数据库,例如 Oracle。我在这里给出了这种方法的一个例子。

于 2015-10-08T04:27:00.683 回答
0

截至 2016 年 5 月的情况如下。

用于 Node 的官方 Microsoft SQL 驱动程序,称为node-sqlserver,已经多年没有更新了。

在此有一个名为node-sqlserver-v8的新分支,适用于节点版本 0.12.x。并且 >= 4.1.x。这个 fork 还为 x64 和 x86 目标预编译了二进制文件。

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

我推荐这个包,因为它是轻量级的(没有依赖项),并且它是唯一适用于所有最新版本的 SQL Server 的包,包括 SQL LocalDB。

于 2016-05-25T08:39:24.763 回答
0

现在(2016 年)您可以使用Sequelize ORM 支持:

  • MySQL / MariaDB,
  • PostgreSQL
  • SQLite
  • 微软 SQL 服务器

根据其 Github 的星级,它被广泛使用。

于 2016-06-29T09:25:05.577 回答
-3

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

真正的解决方案是在 linux 服务器上安装 node JS,或者在 windows 机器上的虚拟 linux 服务器上安装,然后去微软网站下载 JDBC java 驱动程序,然后在其中一个上安装那些 microsoft ms sql java jdbc 驱动程序。 linux服务器或linux虚拟服务器。

于 2011-08-11T23:31:46.560 回答