使用NodeMSSQL来轻松实现数据库操作

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数据库非常的简单。只需要几步就可以连接到数据库并执行查询,插入,更新,删除等操作。

数据库标签