MSSQL 是Nodejs用于链接Microsoft SQL Server 的插件。sql
安装方法数据库
npm install mssql
配置Confignpm
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()很是重要,只建立,不关闭会形成很是严重的内存泄漏。json
建立请求及取消请求
//建立请求: 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建立Tablewindows
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并发
执行进程dom
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中性能
Transactionui
保证所有的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 //即可打印出查询信息