Nodejs MSSQL詳細解讀

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
//即可打印出查詢信息
相關文章
相關標籤/搜索