随笔 - 34  文章 - 0 评论 - 270 阅读 - 15万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

 

 

 

 
 
 
 
 
 
posted on   peiyu1988  阅读(23935)  评论(7编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示