MSSQL 是Nodejs用于连接Microsoft SQL Server 的插件。

安装方法

  1. npm install mssql

配置Config

  1. const config = {
  2. user: '...',
  3. password: '...',
  4. server: 'localhost',
  5. database: '...',
  6. options: {
  7. encrypt: true //使用windows azure,需要设置次配置。
  8. }
  9. }
  1. userSQL Server 的登录名
  1. password: SQL Server的登录密码
  1. server:SQL Server的地址
  1. port:端口号,默认为1433
  1. domain:设置domain后,可通过domain连接数据库
  1. database:数据库名称
  1. connectionTimeout:连接timeout,单位ms 默认 15000
  1. requestTimeout请求timeout,单位ms默认15000
  1. parseJSON:将json数据集转化成json obj
  1. pool.max:连接池最大连接数,默认10
  1. pool.min:连接池最小连接数,默认0
  1. pool.idleTimeoutMillis:设置关闭未使用连接的时间,单位ms默认30000
  2.  
  3. 快速开始
  1. const sql = require('mssql') //声明插件
  2. sql.connect(config).then(() => {
  3. return sql.query`select * from mytable where id = ${value}`
  4. }).then(result => {
  5. //请求成功
  6. }).catch(err => {
  7. //err 处理
  8. })
  9. sql.on('error', err => {
  10. //error 处理
  11. })
  1. Streaming
  1. 如果表格查询的数据量过大,使用Streaming流可以很好地将数据展示出来。
  1. const sql = require('mssql')
  2. sql.connect(config, err => {
  3. const request = new sql.Request()
  4. request.stream = true //开启streaming
  5. request.query('select * from verylargetable') //或者执行request.execute(procedure)
  6. request.on('recordset', columns => {
  7. //每次查询会触发一次 recordset事件,返回结果集
  8. })
  9. request.on('row', row => {
  10. //每个结果集会出发row事件,返回row信息
  11. })
  12. request.on('error', err => {
  13. //监听error事件,可能被触发多次
  14. })
  15. request.on('done', result => {
  16. //最后触发
  17. })
  18. })
  19. sql.on('error', err => {
  20. //error 处理
  21. })
  1.  
  1. POOL连接池
    数据库连接是非常占用资源的,尤其是在高并发的情况下,如果每次都去建立数据库连接就会有性能问题,也会影响一个应用程序的延展性,
    针对这个问题,连接池出现了,连接池就是为了解决这个问题的。
  1. new sql.ConnectionPool(config).connect().then(pool => {
  2. return pool.query`select * from mytable where id = ${value}`
  3. }).then(result => {
  4. console.dir(result)
  5. }).catch(err => {
  6. })

pool.close()非常重要,只创建,不关闭会造成非常严重的内存泄漏。

  1. 创建请求及取消请求
  1. //创建请求:
  2. const request = new sql.Request(/* [pool 或 transaction] */)
  3.  
  4. //取消请求:
  5. const request = new sql.Request()
  6. request.query('waitfor delay \'00:00:05\'; select 1 as number', (err, result) => {
  7. })
  8. request.cancel() //取消之前所有的query动作
  1.  

Bulk创建Table

  1. const table = new sql.Table('table_name')
  2. table.create = true
  3. table.columns.add('a', sql.Int, {nullable: true, primary: true})
  4. table.columns.add('b', sql.VarChar(50), {nullable: false})
  5. table.rows.add(777, 'test')//添加一行信息
  6. const request = new sql.Request()
  7. request.bulk(table, (err, result) => {
  8. })

Execute

执行进程

  1. const request = new sql.Request()
  2. request.input('input_parameter', sql.Int, value)
  3. request.output('output_parameter', sql.Int)
  4. request.execute('procedure_name', (err, result) => {
  5. })

Input(name,type,value)给request添加一个因数

Output(name,type,(value)) 将request返回值,放入name中

Transaction

保证全部的query request在一个连接中完成。Begin创建连接,commit(完成)或者rollback(回滚)释放连接。

  1. const transaction = new sql.Transaction(/* [pool] */)
  2. transaction.begin(err => {
  3. const request = new sql.Request(transaction)
  4. request.query('insert into mytable (mycolumn) values (12345)', (err, result) => {
  5. transaction.commit(err => {
  6. console.log("Transaction committed.")
  7. })
  8. })
  9. })

Prepared Statement

与transaction很像,但是此处确保全部的procedure在一个连接中执行。Prepare创建连接,unpare释放连接。

  1. const ps = new sql.PreparedStatement(/* [pool] */)
  2. ps.input('param', sql.Int)
  3. ps.prepare('select @param as value', err => {
  4. ps.execute({param: 12345}, (err, result) => {
  5. ps.unprepare(err => {
  6. })
  7. })
  8. })

CLI

2.0版本后,mssql便支持CLI功能

安装方法:npm install mssql -g ,需要安装至全局

编辑config文件,命名为.mssql.json

执行

  1. echo "select * from mytable" | mssql /path/to/config
  2. //便可打印出查询信息

 

  1.  
  1.  
  1.  
  1.  
  1.  
  1.  

Nodejs MSSQL详细解读的更多相关文章

  1. Nodejs OracleDB详细解读

    //导入oracledb模块 //基于版本@3.0.1 安装指令npm install oracledb //node访问oracleDB需要搭建访问环境,否则无法正常访问 //创建Oracle对象 ...

  2. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  3. MemCache超详细解读 图

    http://www.cnblogs.com/xrq730/p/4948707.html   MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于 ...

  4. rpm软件包管理的详细解读

    CentOS系统上使用rpm命令管理程序包:安装.卸载.升级.查询.校验.数据库维护 1.基本安装 rpm -ivh PackageFile 2.rpm选项 rpm -ivh --test Packa ...

  5. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  6. Android BLE蓝牙详细解读

    代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...

  7. 为你详细解读HTTP请求头的具体含意

    当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看 ...

  8. 详细解读Volley(三)—— ImageLoader & NetworkImageView

    ImageLoader是一个加载网络图片的封装类,其内部还是由ImageRequest来实现的.但因为源码中没有提供磁盘缓存的设置,所以咱们还需要去源码中进行修改,让我们可以更加自如的设定是否进行磁盘 ...

  9. 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块

    详细解读Python的web.py框架下的application.py模块   这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...

随机推荐

  1. temp-成都农商行路径

    route add 30.3.4.0 mask 255.255.255.0 30.3.12.254 route add 30.3.12.0 mask 255.255.255.0 30.3.12.254 ...

  2. ASP.NET Core 运行原理剖析

    1. ASP.NET Core 运行原理剖析 1.1. 概述 1.2. 文件配置 1.2.1. Starup文件配置 Configure ConfigureServices 1.2.2. appset ...

  3. composer设置忽略版本匹配

    composer install 时遇到错误: Your requirements could not be resolved to an installable set of packages. 原 ...

  4. String类的一些常见的获取方法(5)

     String s = "aasfasfdtgsrast"; 1: int a = s.length() //返回字符串的长度 2: char s1 = charAt(int in ...

  5. 插入排序-python实现

    def insert_sort(arr): for j in range(1,len(arr)):               #从list第二个元素开始 key=arr[j]             ...

  6. BZOJ-1012-[JSOI2008]最大数maxnumber(线段树)

    Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...

  7. AngularJS -- HTML 编译器

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ HTML Compiler Overview(HTML 编译器 概要) AngularJ ...

  8. Cornfields poj2019 二维RMQ

    Cornfields Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit S ...

  9. Android开发更新UI的几种方式

    1.runOnUiThread 2.handler post 3.handler sendmessage 4.view post xml布局文件: <RelativeLayout xmlns:a ...

  10. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...