NodeMSSQL介绍
NodeMSSQL是一个使用Node.js来操作Microsoft SQL Server数据库的模块。该模块支持异步查询,事务,与预处理语句等功能。使用NodeMSSQL可以在Node.js应用程序中执行SQL查询,从而访问和管理Microsoft SQL Server中的数据。
安装NodeMSSQL
在使用NodeMSSQL之前,我们先来看一下如何安装它,可以通过以下的命令来安装这个模块:
npm install mssql
安装完成之后,就可以在Node.js应用程序中使用NodeMSSQL模块了。
连接到数据库
在使用NodeMSSQL之前,我们需要建立一个与数据库的连接。可以通过以下的方式来连接到数据库:
const sql = require('mssql');
const config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'database_name',
};
sql.connect(config)
.then(() => {
console.log('connected');
})
.catch((err) => {
console.log('error: ', err);
});
上面代码中:
sql.connect(config) 连接到数据库,其中config是一个包含数据库连接信息的对象。
.then() 建立连接成功之后执行的回调函数。
.catch() 如果连接失败,则执行该回调函数。
查询数据
查询单个记录
查询单个记录可以通过执行SQL查询语句来实现。可以通过以下的方式来查询单个记录:
const query = 'SELECT * FROM table_name WHERE id = @id';
const pool = new sql.ConnectionPool(config);
const req = pool.request();
req.input('id', sql.Int, 1);
pool.connect().then(() => {
return req.query(query);
}).then((result) => {
console.log(result.recordset[0]);
pool.close();
}).catch((err) => {
console.log(err);
});
上面代码中:
query 是一个包含查询语句的字符串。
pool 是一个连接池实例,可以通过它来创建请求对象。
req 是一个请求对象,包含有input()和query()方法。
pool.connect() 连接池连接成功之后才会执行req.query()方法。
result.recordset[0] 是查询结果的第一条记录。
pool.close() 关闭连接池。
查询多个记录
查询多个记录可以通过执行SQL查询语句来实现。可以通过以下的方式来查询多个记录:
const query = 'SELECT * FROM table_name WHERE age > @age';
const pool = new sql.ConnectionPool(config);
const req = pool.request();
req.input('age', sql.Int, 18);
pool.connect().then(() => {
return req.query(query);
}).then((result) => {
console.log(result.recordset);
pool.close();
}).catch((err) => {
console.log(err);
});
上面代码中:
query 是一个包含查询语句的字符串。
pool 是一个连接池实例,可以通过它来创建请求对象。
req 是一个请求对象,包含有input()和query()方法。
pool.connect() 连接池连接成功之后才会执行req.query()方法。
result.recordset 是查询结果的所有记录。
pool.close() 关闭连接池。
插入数据
插入数据可以通过执行SQL插入语句来实现。可以通过以下的方式来插入数据:
const query = 'INSERT INTO table_name (col1, col2, col3) VALUES (@col1, @col2, @col3)';
const pool = new sql.ConnectionPool(config);
const req = pool.request();
req.input('col1', sql.NVarChar, 'value1');
req.input('col2', sql.Int, 18);
req.input('col3', sql.Decimal(10, 2), 3.14);
pool.connect().then(() => {
return req.query(query);
}).then((result) => {
console.log(result.rowsAffected);
pool.close();
}).catch((err) => {
console.log(err);
});
上面代码中:
query 是一个包含插入语句的字符串。
pool 是一个连接池实例,可以通过它来创建请求对象。
req 是一个请求对象,包含有input()和query()方法。
req.input() 方法用于为每个字段指定类型和值。
pool.connect() 连接池连接成功之后才会执行req.query()方法。
result.rowsAffected 是插入记录的行数。
pool.close() 关闭连接池。
更新数据
更新数据可以通过执行SQL更新语句来实现。可以通过以下的方式来更新数据:
const query = 'UPDATE table_name SET col1 = @value WHERE id = @id';
const pool = new sql.ConnectionPool(config);
const req = pool.request();
req.input('id', sql.Int, 1);
req.input('value', sql.NVarChar, 'new value');
pool.connect().then(() => {
return req.query(query);
}).then((result) => {
console.log(result.rowsAffected);
pool.close();
}).catch((err) => {
console.log(err);
});
上面代码中:
query 是一个包含更新语句的字符串。
pool 是一个连接池实例,可以通过它来创建请求对象。
req 是一个请求对象,包含有input()和query()方法。
req.input() 方法用于为每个字段指定类型和值。
pool.connect() 连接池连接成功之后才会执行req.query()方法。
result.rowsAffected 是更新记录的行数。
pool.close() 关闭连接池。
删除数据
删除数据可以通过执行SQL删除语句来实现。可以通过以下的方式来删除数据:
const query = 'DELETE FROM table_name WHERE id = @id';
const pool = new sql.ConnectionPool(config);
const req = pool.request();
req.input('id', sql.Int, 1);
pool.connect().then(() => {
return req.query(query);
}).then((result) => {
console.log(result.rowsAffected);
pool.close();
}).catch((err) => {
console.log(err);
});
上面代码中:
query 是一个包含删除语句的字符串。
pool 是一个连接池实例,可以通过它来创建请求对象。
req 是一个请求对象,包含有input()和query()方法。
req.input() 方法用于为每个字段指定类型和值。
pool.connect() 连接池连接成功之后才会执行req.query()方法。
result.rowsAffected 是删除记录的行数。
pool.close() 关闭连接池。
事务
事务是一组SQL语句,可以在一个操作中实现多个查询或更新。如果其中一个查询或更新失败,整个事务将被回滚。可以通过以下的方式来使用事务:
const pool = new sql.ConnectionPool(config);
const tx = new sql.Transaction(pool);
tx.begin().then(() => {
const req1 = new sql.Request(tx);
req1.query('INSERT INTO table_name (col1) VALUES (@value)', (err, result) => {
if (err) {
console.log('error: ', err);
tx.rollback();
pool.close();
} else {
const req2 = new sql.Request(tx);
req2.query('UPDATE table_name SET col1 = @value', (err, result) => {
if (err) {
console.log('error: ', err);
tx.rollback();
pool.close();
} else {
tx.commit();
pool.close();
}
});
}
});
}).catch((err) => {
console.log('error: ', err);
pool.close();
});
上面代码中:
pool 是一个连接池实例。
tx 是一个事务实例,通过pool的transaction()方法创建。
tx.begin() 开始一个事务。
tx.rollback() 如果有任何一个查询失败,就回滚整个事务。
tx.commit() 如果所有的查询都成功了,就提交整个事务。
new sql.Request(tx) 创建一个基于事务的请求实例。
req.query() 发送基于事务的查询请求。
总结
总之,使用NodeMSSQL来操作Microsoft SQL Server数据库非常的简单。只需要几步就可以连接到数据库并执行查询,插入,更新,删除等操作。