Node.js SQL-сервер: обновление

В этом руководстве вы узнаете, как обновлять данные в SQL Server из приложений Node.js.

Это руководство начинается с того места, где закончилось руководство по выполнению массовой вставки из Node.js.

Мы покажем вам, как обновить имя автора в таблице «Авторы».

Обновление данных в таблице

Шаг 1. Создайте новый файл с именем update.js в каталоге проекта.

Шаг 2. Определите новую функцию updateAuthor в файле update.js для обновления имени автора:

import sql from 'mssql';
import { config } from './config.js';
export const updateAuthor = async(id, firstName) => {
  try {
    // Connect to the database
    await sql.connect(config);
    // Update the First Name
    const result =
      await sql.query`UPDATE Authors SET FirstName =${firstName} WHERE AuthorID=${id}`;
    console.dir(result);
  } catch(err) {
    console.error(err);
  }
};

Как это работает.

Сначала импортируйте объект sql из модуля mssql и объект config из модуля config.js соответственно:

import sql from 'mssql';
import { config } from './config.js';

Обратите внимание, что объект конфигурации содержит все параметры базы данных, включая сервер, имя базы данных, имя пользователя и пароль.

Во-вторых, определите функцию updateAuthor, которая обновляет имя автора, указанного идентификатором:

export const updateAuthor = async(id, firstName) => {

В-третьих, подключитесь к SQL Server, используя метод connect() объекта SQL:

await sql.connect(config);

В-четвертых, выполните оператор UPDATE, чтобы изменить имя автора, указанное в идентификаторе автора, на новое:

const result =
      await sql.query`UPDATE Authors SET FirstName =${firstName} WHERE AuthorID=${id}`;

В-пятых, отобразите результат, если запрос выполнен успешно:

console.dir(result);

Объект результата содержит количество обновленных строк. Чтобы получить к нему доступ, используйте свойство rowsAffected:

result.rowsAffected

Это массив чисел, указывающий строку, затронутую операторами. Чтобы получить доступ к строкам, затронутым первым оператором, вы можете получить доступ к первому элементу массива result.rowsAffected:

if(result.rowsAffected.length >= 1) {
  console.log(`Row(s) affected: ${result.rowsAffected[0]}`);
}

Шаг 3. Импортируйте updateAuthor из модуля update.js и вызовите его, чтобы обновить имя автора с идентификатором 14 на «Джоан Кэтлин»:

import { updateAuthor } from './update.js';
await updateAuthor(14, 'Joanne Kathleen');

Шаг 4. Откройте терминал и выполните следующую команду для запуска файла index.js:

npm start

Если вы видите следующий вывод, вы успешно обновили строку:

{
  recordsets: [],
  recordset: undefined,
  output: {},
  rowsAffected: [ 1 ]
}

Выходные данные показывают, что rowsAffected содержит число 1, что означает, что одна строка была успешно обновлена.

Вот подробная информация о свойствах объекта результата:

  • recordsets содержит массив наборов записей.
  • Recordset хранит первый набор записей из массива наборов записей.
  • rowsAffected — это массив чисел, представляющих несколько затронутых строк каждым оператором.
  • выход — это коллекция значений выходных параметров по типу «ключ/значение».

Обновление данных с использованием параметров

Ниже переопределяется updateAuthor, который использует параметры для обновления имени автора, указанного идентификатором:

import sql from 'mssql';
import { config } from './config.js';
export const updateAuthor = async(id, firstName) => {
  try {
    // Connect to the database
    const pool = await sql.connect(config);
    // Update the First Name
    const result = await pool
      .request()
      .input('id', sql.Int, id)
      .input('firstName', sql.VarChar, firstName)
      .query(`UPDATE Authors SET FirstName =@firstName WHERE AuthorID=@id`);
    if(result.rowsAffected.length >= 1) {
      console.log(`${result.rowsAffected.length} row(s) updated!`);
    }
  } catch(err) {
    console.error(err);
  }
};

Как это работает.

Сначала откройте соединение с SQL Server:

const pool = await sql.connect(config);

Метод connect() возвращает объект ConnectionPool.

Во-вторых, выполните оператор UPDATE, выполнив метод запроса и привязав параметры с помощью метода input():

const result = await pool
  .request()
  .input('id', sql.Int, id)
  .input('firstName', sql.VarChar, firstName)
  .query(`UPDATE Authors SET FirstName =@firstName WHERE AuthorID=@id`);

В этом операторе @firstName и @id являются держателями параметров. Они будут заменены значениями параметров id и firstName, предоставленными методам input() соответственно.

Метод query() возвращает объект результата, содержащий ту же информацию, что и литералы шаблона, помеченные тегом sql.query.

В-третьих, отобразите количество обновленных строк:

if(result.rowsAffected.length >= 1) {
  console.log(`${result.rowsAffected.length} row(s) updated!`);
}

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Используйте литералы шаблона тега sql.query или метод query() для выполнения оператора UPDATE с целью обновления строки в таблице из Node.js.
Мирослав С.

Автор статей, ИБ-специалист