之前在写 nodeJs 项目时如遇到与数据库做交互时通常会想到用 knex.js 这个依赖,可最近的项目就遇到用 knex.js 会翻车的情况。在执行批量 SQL 语句时力不从心。比如多条 updata 语句一起执行结果只执行了最后一条的情况。
这种情况下只能放弃使用 knex.js ,去使用原生态来解决是最佳的方法,但 mssql 几乎不用的情况,上手起来还是有点费劲!
1、安装、引用
npm install mssql
配置
const config = {
user: '...',
password: '...',
server: 'localhost',
database: '...',
options: {
encrypt: true //使用windows azure,需要设置次配置。
}
}
- user:SQL Server 的登录名
- password: SQL Server的登录密码
- server:SQL Server的地址
- port:端口号,默认为1433
- domain:设置domain后,可通过domain连接数据库
- database:数据库名称
- connectionTimeout:连接timeout,单位ms 默认 15000
- requestTimeout:请求timeout,单位ms默认15000
- parseJSON:将json数据集转化成json obj
- pool.max:连接池最大连接数,默认10
- pool.min:连接池最小连接数,默认0
- pool.idleTimeoutMillis:设置关闭未使用连接的时间,单位ms默认30000
2、执行(多)SQL 语句
let mssql = require('mssql');
mssql.connect(Config.MSSql_100, err => {
// ... error checks
if (err) { callback(err); }
// console.log('clientByKeyWord_bat', sql);
// Query
new mssql.Request().query(sql, (err, result) => {
// ... error checks
if (err) { callback(err); } else { callback(null, result); }
})
})
mssql.on('error', err => {
// ... error handler
if (err) { callback(err); }
})
用上面这段代码单次执行是没有问题的,但在生产环境下,用 node-cron 进行定时重复执行就有翻车了,在首次执行完后,想再次执行就不要想了。所以只好根据同事的提醒去寻找有关它的关闭连接的操作,因为这种情况的原因有可能是没有在第一次执行完后没有关闭它的连接有关。这对于极少接触 mssql 的来说又是个不知道怎么处理的问题。不过还是在网上找到了解决的代码。
let mssql = require('mssql');
mssql.connect(Config.MSSql_100, err => {
// ... error checks
if (err) { callback(err); }
// console.log('clientByKeyWord_bat', sql);
// Query
new mssql.Request().query(sql, (err, result) => {
// ... error checks
if (err) { callback(err); } else { callback(null, result); }
})
})
mssql.on('error', err => {
// ... error handler
if (err) { callback(err); }
})
npm 手册:
https://www.npmjs.com/package/mssql
转载请注明:隨習筆記 » nodeJs 在 mssql 执行批量 SQL 语句