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 //即可打印出查詢信息