Модуль работы с БД
Принцип работы: модуль подключается к БД по connectionString из реестра Windows. Большинство операций асинхронные.
Модуль поддерживает работу с СУБД: Access, MS SQL, Oracle и Postgres SQL.
Для подключения к Access и к Postres используется модуль @chemsoft/odbc.
Для подключения к MS SQL используется модуль mssql/msnodesqlv8.
Для подключения к Oracle используется модуль @chemsoft/oracledb.
Начало работы
Можно запросить клиент для необходимой СУБД вручную:
const {AccessClient, MssqlClient, OracleClient} = require('@chemsoft/db')
const access = new AccessClient(`connection string`)
const mssql = new MssqlClient(`connection string`)
const oracle = new OracleClient(`connection string`)
const oracle = new PostgresClient(`connection string`)
Можно в полностью автоматическом режиме получить клиент для нужной СУБД, получая при этом универсальное решение для любой БД:
Такой трюк работает, благодаря общему интерфейсу.
client.connect()
Производит подключение к БД. Почему не реализовано в конструкторе? Для того, чтобы реализовать ленивый запрос зависимостей, таким образом, подключены будут только используемые в текущий момент пакеты для подключения к БД.
client.disconnect()
Производит отключение от БД в явном виде, таким образом не будет создаваться лишних соединений с БД, на одного пользователя будет только одно подключение. Необходимо вызвать в конце потока исполнения скрипта.
client.execute()
Выполняет запрос. В зависимости от типа БД ответ может различаться.
IExecuteResult это интерфейс для максимально общего описания возвращаемых значений. Содержит массив записей и метаданные.
interface IExecuteResult {
records: Array<{ [columnName: string]: any }>;
meta: {
rowsAffected?: number;
}
}
type QueryParameter = null |
number |
boolean |
string |
Date |
{ type: 'date' | 'time'; value: Date }
query: string текст SQL запроса
parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр
client.executeScalar()
Выполняет запрос и возвращает одно скалярное значение (даже если может быть возвращено несколько колонок). Если возвращено несколько записей и колонок, то возвращает данные из первой записи и первой колонки.
query: string текст SQL запроса
parameters?: QueryParameter[] массив параметров запроса, в тексте запроса можно ставить символ ?, на его место будет подставляться правильно отформатированный параметр
client.requireFromDatabase()
Выполняет запрос и срабатывает как require(), но код модуля получает из БД. В основном используется в планировщике.