El módulo mssql
es una biblioteca de Node.js diseñada para interactuar con bases de datos MSSQL (Microsoft SQL Server) de manera asincrónica.
Ofrece una interfaz sencilla para realizar operaciones como consultas, inserciones, actualizaciones y eliminaciones.
Para que funcione deberéis tener una base de datos MSSQL accesible, y configurada con
- Usuario válido
- Escuchando llamadas TCP
- Con SQL Browser activado
Cómo conectar Node.js a MSSQL
Primero, necesitas instalar el módulo mssql
en tu proyecto. Puedes hacerlo utilizando npm:
npm install mssql
Para conectar Node.js con Microsoft SQL Server podemos utilizar diferentes controladores TDS. Los dos principales son:
- Tedious: Este controlador está escrito en JavaScript puro y es compatible con Windows, macOS y Linux. Es el controlador predeterminado para Node.js y se utiliza ampliamente en aplicaciones que se ejecutan en diversas plataformas.
- Microsoft / Contributors Node V8 Driver for Node.js for SQL Server (v2): Este controlador es nativo y está optimizado para Windows o Linux/macOS de 64 bits. Aunque es menos común que Tedious, funciona de maravilla.
Configuración de la conexión
Para establecer una conexión con nuestra base de datos MSSQL, primero debemos hacer la configuración con los datos de nuestro servidor. Además, hay opciones adicionales que pueden ser necesarias dependiendo de la configuración de vuestra base de datos.
Veamos un ejemplo básico de configuración osando Tedious
, que es el driver por defecto.
const dbConfig = {
user: 'tu_usuario',
password: 'tu_password',
server: 'localhost', // Puede ser una dirección IP o nombre del servidor
port: 1433,
database: 'nombre_de_tu_base_de_datos',
dialect: "mssql",
options: {
encrypt: false,
trustServerCertificate: true,
trustedConnection: true,
},
};
En este ejemplo, sustituye 'tu_usuario'
, 'tu_contraseña'
, 'localhost'
y 'nombre_de_tu_base_de_datos'
con los valores específicos de tu entorno.
Estableciendo la conexión
Una vez que tenemos nuestra configuración, podemos utilizar mssql
para establecer la conexión a la base de datos:
import sql from 'mssql';
import dbConfig from './dbConfig.mjs';
// Función para conectarse y realizar una consulta
async function conectarYConsultar() {
try {
// Conectarse a la base de datos
await sql.connect(config);
// Consulta SQL
const result = await sql.query`SELECT * FROM TuTabla`;
// Imprimir resultados
console.dir(result);
} catch (err) {
// Manejar errores
console.error('Error al intentar conectarse:', err);
} finally {
// Cerrar la conexión al finalizar
sql.close();
}
}
// Llamar a la función para conectar y consultar
conectarYConsultar();
En este ejemplo:
config
contiene los detalles de la conexión, como el usuario, contraseña, servidor y base de datos.- La función
conectarYConsultar
se encarga de conectarse a la base de datos, ejecutar una consulta (SELECT * FROM TuTabla
) y mostrar los resultados.
Trusted connection
Si queréis usar Integrated Security / Trusted Connection, lo mejor es que instaléis el Driver msnodesqlv8
para node-sql.
npm install msnodesqlv8
Ahora cambiáis vuestro fichero de configuración a los siguiente
const sql = require('mssql/msnodesqlv8');
var dbConfig = {
server: 'localhost',
port: 1433,
database: 'curso',
driver: "msnodesqlv8",
options: {
trustedConnection: true,
}
}
En el fichero de nuestra app, tendemos que cambiar los import
porque msnodesqlv8
es una librería CommonJS, de las que dan problemas de uso si no lo importamos require
de node:module
Así que quedaría algo así,
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const sql = require('mssql/msnodesqlv8');
import dbConfig from './dbconnection.mjs';
async function conectarYConsultar() {
try {
// resto del contenido
///...
}
Consultas SQL
Ahora que estamos conectados a nuestra base de datos MSSQL, podemos ejecutar consultas SQL para interactuar con los datos. mssql
proporciona métodos para realizar consultas de manera segura y efectiva.
Consulta simple
Para una consulta básica que obtiene todos los registros de una tabla, podemos usar:
async function consultarDatos() {
try {
const result = await sql.query`SELECT * FROM TuTabla`;
console.dir(result);
} catch (error) {
console.error('Error al ejecutar la consulta:', error);
}
}
En este ejemplo, TuTabla
representa el nombre de la tabla en tu base de datos. Los resultados de la consulta se imprimirán en la consola.
Consulta parametrizada
Las consultas parametrizadas son útiles para evitar ataques de inyección SQL y para proporcionar una forma más segura y eficiente de ejecutar consultas con valores variables.
async function consultaParametrizada() {
try {
const nombre = 'John';
const result = await sql.query`SELECT * FROM TuTabla WHERE Nombre = ${nombre}`;
console.dir(result);
} catch (error) {
console.error('Error al ejecutar la consulta parametrizada:', error);
}
}
En este ejemplo, nombre
es un parámetro que se utiliza en la consulta para filtrar los resultados por el nombre especificado.
Transacciones
Las transacciones son importantes para garantizar la integridad de los datos al realizar operaciones que deben ser atómicas.
async function ejecutarTransaccion() {
try {
await sql.connect(config);
const transaction = new sql.Transaction();
await transaction.begin();
const result1 = await transaction.request().query('INSERT INTO TuTabla (campo1, campo2) VALUES (valor1, valor2)');
const result2 = await transaction.request().query('UPDATE OtraTabla SET campo = nuevo_valor WHERE condicion');
await transaction.commit();
console.log('Transacción completada.');
} catch (error) {
console.error('Error al ejecutar la transacción:', error);
await transaction.rollback();
} finally {
sql.close();
}
}
En este ejemplo, se crea una transacción donde se ejecutan dos consultas. Si alguna de las consultas falla, la transacción se revierte para mantener la integridad de los datos.
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github