Node.js и Microsoft SQL Server

Есть ли способ заставить мое приложение Node.js связываться с Microsoft SQL? Я не видел никаких драйверов MS SQL в дикой природе?

Я собираю очень простое приложение и должен иметь возможность общаться с существующей базой данных MS SQL (иначе я бы отправился с mongoDB или Redis)

Ответ 2

Оригинальный вопрос старый и теперь используется node-mssql, как ответил @Patrik Šimek, который завершает Tedious, как ответил @Tracker1, это лучший способ пойти.

Windows/Azure node -sqlserver driver, как указано в принятом ответе, требует установки сумасшедшего списка предварительных условий: Visual С++ 2010, SQL Server Native Client 11.0, python 2.7.x и, возможно, также Windows 7 SDK для 64-бит на вашем сервере. Вы не хотите устанавливать все эти ГБ программного обеспечения на свой Windows Server, если вы спросите меня.

Вы действительно хотите использовать Tedious. Но также используйте node-mssql, чтобы обернуть его и сделать кодирование намного проще.

Обновление в августе 2014 года

  • Оба модуля все еще активно поддерживаются. Вопросы реагируют довольно быстро и эффективно.
  • Оба модуля поддерживают SQL Server 2000 - 2014
  • Поддержка потоковой передачи с node -mssql 1.0.1

Обновление февраль 2015 г. - 2.x(стабильный, npm)

  • Обновлено до последней версии Tedious 1.10
  • Promises
  • Запрос трубы на поток объекта
  • Подробные ошибки 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, который имеет 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);
    });
});

Ответ 3

Несколько новых node.js клиентов SQL-сервера недавно выпущены. Я написал один под названием node-tds, и есть еще один tedious

Ответ 4

Возможно, вы можете использовать node -tds.js:

Увлекательная реализация протокола TDS для node.js для связи с сервером sql...

ПРИМЕНЕНИЕ:

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

Ответ 5

Существует еще один модуль, который вы можете использовать - node-mssql. Он использует другие модули TDS в качестве драйверов и предлагает простой в использовании унифицированный интерфейс. Он также добавляет дополнительные функции и исправления ошибок.

Дополнительные функции:

  • Унифицированный интерфейс для нескольких драйверов MSSQL
  • Пул соединений с транзакциями и подготовленными операциями
  • Параметрированные хранимые процедуры для всех драйверов
  • Сериализация типов CLR географии и геометрии
  • Интеллектуальный тип данных JS для типа данных данных SQL
  • Поддержка как Promises, так и стандартных обратных вызовов

Ответ 6

(дублируя мой ответ из другого вопроса).

Я бы порекомендовал node-mssql, что является хорошей оболочкой для других коннекторов, по умолчанию это мой предыдущий выбор (Tedious), что немного облегчает интерфейс. Это экспломатизация JavaScript, без требований к компиляции, что означает, что вы можете работать как в окнах, так и в не-окнах.

Другой вариант, если вы не возражаете подключиться .Net или Mono с бинарным мостом, будет использовать edge.js. Что может быть очень приятно, если вы хотите использовать библиотеки .NET в node.js

node-tds заброшено, node-odbc не работает с окнами, а драйвер MS node-sqlserver, похоже, не работает на не-окнах (и имеет некоторые противоречивые требования).

Ответ 7

TSQLFTW - T-SQL для WIN (dows) - от Fosco Marotto https://github.com/gfosco/tsqlftw

Это управляемое кодовое решение на С# и ADO.NET, с оберткой С++, с которой может импортироваться и работать Node.js.


Если вы знаете .NET, вы можете попробовать службы данных WCF (службы данных ADO.NET); написать приложение WCF для доступа к данным и использовать odata (REST на стероидах) для взаимодействия с базой данных


Если вы работаете в SOA и используете SQL Server 2005, вы можете проверить собственные веб-службы XML для Microsoft SQL Server 2005

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

Вы можете получить доступ к SQL Server в качестве веб-службы (HTTP, SOAP)

Ответ 9

Если вы работаете в .NET, посмотрите на entityspaces.js at, мы создаем целую универсальную ORM для Node.js, которая не потребует службы WCF JSON... https://github.com/EntitySpaces/entityspaces.js

Если вы используете бэкэнд-технологию MSFT, вы можете использовать ее сейчас, однако мы создаем универсальную Node.js ORM и будем иметь больше информации об этом скоро

Ответ 10

Существует обновление от Microsoft. Вот серия сообщений в блогах (часть 1 и часть 2).

Ответ 11

Node.js Драйверы SQL Server кажутся очень незрелыми - есть мишень различных проектов с различными зависимостями, производительностью и уровнем полноты, ни одна из которых не внушает доверия.

Я бы предложил использовать edge-sql. Это использует экосистему среды разработки .NET с зрелой базой данных и зависит только от .NET(без проблем, если вы используете node для Windows - если нет Mono, но я этого не пробовал).

Вот пример node (server.js) с использованием edge-sql (обратите внимание, что вам нужно поместить строку подключения в переменную среды в соответствии с документами 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. Я привел пример такого подхода здесь.

Ответ 12

Статус на май 2016 года выглядит следующим образом.

Официальный драйвер Microsoft SQL для Node, называемый node-sqlserver, не обновлялся в течение нескольких лет.

В этом объявлении есть новая вилка node-sqlserver-v8, которая работает с Node версиями 0.12.x. и >= 4.1.x. Эта вилка также имеет предварительно скомпилированные двоичные файлы для целей x64 и x86.

Пакет доступен на NPM как msnodesqlv8.

Я рекомендую этот пакет, потому что он легкий (не имеет зависимостей), и он является единственным, который работает со всей последней версией SQL Server, включая SQL LocalDB.

Ответ 13

Теперь (2016) вы можете использовать Sequelize ORM, который поддерживает:

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

Он широко используется в соответствии с его звездами Github.

Ответ 14

который связывает детали только с SQL 2000, а не с sql 2005 и sql 2008, а также этот код позволяет отправлять только текст sql и не позволяет выполнять хранимые процедуры.

Реальное решение заключалось бы в установке node JS на сервере linux или на виртуальном Linux-сервере на машине Windows, а затем перейдите на веб-сайт Microsoft и загрузите java-драйверы JDBC и установите эти microsoft ms sql java jdbc на сервере Linux или виртуальном сервере Linux.