繁体   English   中英

Node.js 和 Microsoft SQL Server

[英]Node.js and Microsoft SQL Server

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

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

原来的问题是旧的,现在使用节点MSSQL由@Patrik西梅克一个包装作为回答繁琐由@ Tracker1是最好的方式去作为回答。

已接受的答案中提到的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 Server 上安装所有这些 GB 的软件。

您真的很想使用Tedious 使用node-mssql来包装它并使编码更容易。

2014 年 8 月更新

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

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

  • 更新到最新的乏味 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 ,它具有乏味作为依赖项。 用这个!

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

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

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

你也许可以使用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;");

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

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

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

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

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

额外功能:

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

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

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

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

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

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

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

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

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

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。 在这里给出了这种方法的一个例子。

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM