MSSQL 是Nodejs用于连接Microsoft SQL Server 的插件。
安装方法
npm install mssql
配置Config
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
快速开始
const sql = require('mssql') //声明插件 sql.connect(config).then(() => { return sql.query`select * from mytable where id = ${value}` }).then(result => { //请求成功 }).catch(err => { //err 处理 }) sql.on('error', err => { //error 处理 })
Streaming流
如果表格查询的数据量过大,使用Streaming流可以很好地将数据展示出来。
const sql = require('mssql') sql.connect(config, err => { const request = new sql.Request() request.stream = true //开启streaming request.query('select * from verylargetable') //或者执行request.execute(procedure) request.on('recordset', columns => { //每次查询会触发一次 recordset事件,返回结果集 }) request.on('row', row => { //每个结果集会出发row事件,返回row信息 }) request.on('error', err => { //监听error事件,可能被触发多次 }) request.on('done', result => { //最后触发 }) }) sql.on('error', err => { //error 处理 })
POOL连接池
数据库连接是非常占用资源的,尤其是在高并发的情况下,如果每次都去建立数据库连接就会有性能问题,也会影响一个应用程序的延展性,
针对这个问题,连接池出现了,连接池就是为了解决这个问题的。
new sql.ConnectionPool(config).connect().then(pool => { return pool.query`select * from mytable where id = ${value}` }).then(result => { console.dir(result) }).catch(err => { })
pool.close()非常重要,只创建,不关闭会造成非常严重的内存泄漏。
创建请求及取消请求
//创建请求: const request = new sql.Request(/* [pool 或 transaction] */) //取消请求: const request = new sql.Request() request.query('waitfor delay \'00:00:05\'; select 1 as number', (err, result) => { }) request.cancel() //取消之前所有的query动作
Bulk创建Table
const table = new sql.Table('table_name') table.create = true table.columns.add('a', sql.Int, {nullable: true, primary: true}) table.columns.add('b', sql.VarChar(50), {nullable: false}) table.rows.add(777, 'test')//添加一行信息 const request = new sql.Request() request.bulk(table, (err, result) => { })
Execute
执行进程
const request = new sql.Request() request.input('input_parameter', sql.Int, value) request.output('output_parameter', sql.Int) request.execute('procedure_name', (err, result) => { })
Input(name,type,value)给request添加一个因数
Output(name,type,(value)) 将request返回值,放入name中
Transaction
保证全部的query request在一个连接中完成。Begin创建连接,commit(完成)或者rollback(回滚)释放连接。
const transaction = new sql.Transaction(/* [pool] */) transaction.begin(err => { const request = new sql.Request(transaction) request.query('insert into mytable (mycolumn) values (12345)', (err, result) => { transaction.commit(err => { console.log("Transaction committed.") }) }) })
Prepared Statement
与transaction很像,但是此处确保全部的procedure在一个连接中执行。Prepare创建连接,unpare释放连接。
const ps = new sql.PreparedStatement(/* [pool] */) ps.input('param', sql.Int) ps.prepare('select @param as value', err => { ps.execute({param: 12345}, (err, result) => { ps.unprepare(err => { }) }) })
CLI
2.0版本后,mssql便支持CLI功能
安装方法:npm install mssql -g ,需要安装至全局
编辑config文件,命名为.mssql.json
执行
echo "select * from mytable" | mssql /path/to/config //便可打印出查询信息