文档章节

nodejs封装mssql

c
 caiyezi
发布于 2016/11/08 20:23
字数 819
阅读 17
收藏 0
点赞 0
评论 0

对mssql操作Sqlserver数据库的基本封装:

记录一下:

/**
 * Created by chaozhou on 2015/9/18.
 */
var mssql = require('mssql');
var constclass = require('../config/constClass');

var user = constclass.db.user,
    password = constclass.db.password,
    server = constclass.db.server,
    database = constclass.db.database;

/**
 * 默认config对象
 * @type {{user: string, password: string, server: string, database: string, options: {encrypt: boolean}, pool: {min: number, idleTimeoutMillis: number}}}
 */
var config = {
    user: user,
    password: password,
    server: server, // You can use 'localhost\\instance' to connect to named instance
    database: database,
    options: {
        encrypt: true, // Use this if you're on Windows Azure
        useUTC: false
    },
    pool: {
        min: 10,
        max: 100,
        idleTimeoutMillis: 30000
    }
};

var connection = new mssql.Connection(config);
connection.on('error', function (err) {
    console.error(err);
});
connection.connect(function (err) {
    if (err) {
        console.error(err);
    }
});

/**
 * 执行原生Sql
 * @param sql
 * @params 参数对象(可为空,为空表示不加参数)
 * @param callBack(err,recordset)
 */
var querySql = function (sql, params, callBack) {
    var ps = new mssql.PreparedStatement(connection);
    if (params != "") {
        for (var index in params) {
            if (typeof params[index] == "number") {
                ps.input(index, mssql.BigInt);
            } else if (typeof params[index] == "string") {
                ps.input(index, mssql.NVarChar);
            }
        }
    }
    console.log("sql:" + sql);
    ps.prepare(sql, function (err) {
        if (err)
            console.log(err);
        ps.execute(params, function (err, recordset) {
            callBack(err, recordset);
            ps.unprepare(function (err) {
                if (err)
                    console.log(err);
            });
        });
    });

};

/**
 * 带参数查询
 * @param tableName 表名
 * @param topNumber 前topNumber条
 * @param whereSql  whereSql
 * @param params    查询参数对象(可为"",为""表示不加任何参数,如果此项为"",则whereSql必须也为"")
 * @param orderSql  排序Sql(可为"",为""表示不排序)
 * @param callBack
 */
var select = function (tableName, topNumber, whereSql, params, orderSql, callBack) {

    var ps = new mssql.PreparedStatement(connection);
    var sql = "select * from " + tableName + " ";
    if (topNumber != "") {
        sql = "select top(" + topNumber + ") * from " + tableName + " ";
    }
    sql += whereSql + " ";
    if (params != "") {
        for (var index in params) {
            if (typeof params[index] == "number") {
                ps.input(index, mssql.BigInt);
            } else if (typeof params[index] == "string") {
                ps.input(index, mssql.NVarChar);
            }
        }
    }
    sql += orderSql;
    console.log(sql);
    ps.prepare(sql, function (err) {
        if (err)
            console.log(err);
        ps.execute(params, function (err, recordset) {
            callBack(err, recordset);
            ps.unprepare(function (err) {
                if (err)
                    console.log(err);
            });
        });
    });
};


/**
 * 查询所有
 * @param tableName
 * @param callBack
 */
var selectAll = function (tableName, callBack) {
    var ps = new mssql.PreparedStatement(connection);
    var sql = "select * from " + tableName + " ";
    console.log("sql:" + sql);
    ps.prepare(sql, function (err) {
        if (err)
            console.log(err);
        ps.execute("", function (err, recordset) {
            callBack(err, recordset);
            ps.unprepare(function (err) {
                if (err)
                    console.log(err);
            });
        });
    });
};

/**
 * 添加
 * @param addObj    添加对象(必填)
 * @param tableName 表名
 * @param callBack(err,recordset)
 */
var add = function (addObj, tableName, callBack) {      //{id:3,userName:'admin'...}        insert into dbo.tags(id,name) values(@id,@name)
    var ps = new mssql.PreparedStatement(connection);
    var sql = "insert into " + tableName + "(";
    if (addObj != "") {
        for (var index in addObj) {
            if (typeof addObj[index] == "number") {
                ps.input(index, mssql.BigInt);
            } else if (typeof addObj[index] == "string") {
                ps.input(index, mssql.NVarChar);
            } else if (typeof addObj[index] == "object") {
                ps.input(index, mssql.DateTime);
            }
            sql += index + ",";
        }
        sql = sql.substr(0, sql.length - 1) + ") output inserted.* values(";
        for (var index in addObj) {
            sql = sql + "@" + index + ",";
        }
    }
    sql = sql.substr(0, sql.length - 1) + ")";
    console.log(sql);
    ps.prepare(sql, function (err) {
        if (err)
            console.log(err);
        ps.execute(addObj, function (err, recordset) {
            callBack(err, recordset);
            ps.unprepare(function (err) {
                if (err)
                    console.log(err);
            });
        });
    });
};

/**
 * 修改
 * @param updateObj     修改内容(必填)
 * @param whereObj      修改对象(必填)
 * @param tableName     表名
 * @param callBack(err,recordset)
 */
var update = function (updateObj, whereObj, tableName, callBack) {
    var ps = new mssql.PreparedStatement(connection);
    var sql = "update " + tableName + " set ";
    if (updateObj != "") {
        for (var index in updateObj) {
            if (typeof updateObj[index] == "number") {
                ps.input(index, mssql.BigInt);
            } else if (typeof updateObj[index] == "string") {
                ps.input(index, mssql.NVarChar);
            } else if (typeof updateObj[index] == "object") {
                ps.input(index, mssql.DateTime);
            }
            sql += index + "=@" + index + ",";
        }
        sql = sql.substr(0, sql.length - 1) + " where ";
    }
    if (whereObj != "") {
        for (var index in whereObj) {
            if (typeof whereObj[index] == "number") {
                ps.input(index, mssql.BigInt);
            } else if (typeof whereObj[index] == "string") {
                ps.input(index, mssql.NVarChar);
            } else if (typeof whereObj[index] == "object") {
                ps.input(index, mssql.DateTime);
            }
            sql += index + "=@" + index + ",";
        }
    }
    sql = sql.substr(0, sql.length - 1);
    var whereStr = JSON.stringify(whereObj);
    var updateStr = JSON.stringify(updateObj);
    whereObj = JSON.parse(updateStr.substr(0, updateStr.length - 1) + "," + whereStr.substr(1, whereStr.length));
    console.log(sql);
    ps.prepare(sql, function (err) {
        if (err)
            console.log(err);
        ps.execute(whereObj, function (err, recordset) {
            callBack(err, recordset);
            ps.unprepare(function (err) {
                if (err)
                    console.log(err);
            });
        });
    });
};

/**
 * 删除
 * @param deleteObj 删除对象
 * @param tableName 表名
 * @param callBack(err,recordset)
 */
var del = function (whereSql, params, tableName, callBack) {
    var ps = new mssql.PreparedStatement(connection);
    var sql = "delete from " + tableName + " ";
    if (params != "") {
        for (var index in params) {
            if (typeof params[index] == "number") {
                ps.input(index, mssql.BigInt);
            } else if (typeof params[index] == "string") {
                ps.input(index, mssql.NVarChar);
            }
        }
    }
    sql += whereSql;
    console.log("sql:" + sql);
    ps.prepare(sql, function (err) {
        if (err)
            console.log(err);
        ps.execute(params, function (err, recordset) {
            callBack(err, recordset);
            ps.unprepare(function (err) {        //回收连接至连接池
                if (err)
                    console.log(err);
            });
        });
    });
};

//del("where id = @id",{id:16},"dbo.userTable",function(err,recordset){
//    console.log(recordset);
//});

//exports.initConfig = initConfig;
exports.config = config;
exports.del = del;
exports.select = select;
exports.update = update;
exports.querySql = querySql;
exports.selectAll = selectAll;
exports.add = add;

 

本文转载自:http://www.cnblogs.com/vipzhou/p/4827936.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
Sequelize 5.0.0-beta.7 发布,基于 Nodejs 的 ORM 框架

Sequelize 5.0.0-beta.7 发布了,此次更新内容如下: fix(data-types/blob): only return null for mysql binary null #9441 fix(errors): use standard .original rather than .raw for ac......

雨田桑
05/29
0
0
鼓捣phantomjs(二) node.js模块化集成

著作权所有:http://www.cnblogs.com/zeusro/ 引用(爬虫)不给稿费的,切你jj 追忆似屎年华 在上一篇post(http://www.cnblogs.com/zeusro/p/4185196.html)里面,我留下了3个坑没有填平。 ...

amiba.org
2014/12/27
0
0
Sequelize 4.38.0 发布,新增 PostgreSQL 网络类型

Sequelize 4.38.0 发布了,Sequelize 是一款基于 Nodejs 的异步 ORM 框架,它同时支持PostgreSQL、MySQL、SQLite 和 MSSQL 多种数据库,很适合作为 Nodejs 后端数据库的存储接口,为快速开发...

h4cd
06/23
0
0
Sequelize v5.0.0-beta.4 发布,基于 Nodejs 的 ORM 框架

Sequelize v5.0.0-beta.4 发布,Sequelize 是一款基于 Nodejs 的异步 ORM 框架,它同时支持PostgreSQL、MySQL、SQLite 和 MSSQL 多种数据库,很适合作为 Nodejs 后端数据库的存储接口,为快速...

雨田桑
04/30
0
0
FreeBSD下执行SQL Server2005存储过程解决方案

FreeBSD下执行SQL Server2005存储过程解决方案(Warning: mssql_execute(): ...) FreeBSD下使用SQL Server2005(2008)需要使用FreeTDS。 安装FreeTSD后,使用PHP语言进行测试。在使用mssql_e...

雷xiao雨
2014/03/01
0
0
node.js从数据库获取数据

需要用node.js做一个从Sqlserver获取数据并显示到页面上的小功能。 ====app.js==== ... var sqlbll = require('./routes/sqlbll'); ... app.get('/sqlbll/:ver', function(req, res){ var ve......

KelvinQ
2013/12/16
0
0
SQLServer 开启远程访问,也可逆向思维进行关闭

为了可以通过TCP/IP协议远程访问SQLServer数据库,需要做以下几点: 在SQLServer所运行的服务器上,我们必须找到SQLServer所侦听的端口然后添加到WIndows防火墙的【允许入站】中。 一:需要添...

easonjim
2015/08/25
0
0
windows下 php5.3如何连接mssql

因为php5.3以后php官方不再支持php_mssql扩展,那么php5.3以后如何连接mssql呢。 还好,microsoft 推出了一个sqlsrv扩展。安装步骤如下: 注,安装之前请检查你的操作系统是否是下面列表中之...

logan_li
2013/02/25
0
1
Redhat/CentOS 7下的msSQL安装

随着微软的不断向linux方向开拓,从开始的Bash on Ubuntu on Windows(Windows下的Ubuntu on Windows安装可以参看:http://blog.51cto.com/jim123/1962108)开始到目前在微软在Satya Nadella...

往事_Jim_遗
06/26
0
0
MSSQL-Server On Docker

安装先决条件: • 适用于支持的任一 Linux 分发版的 Docker 引擎 1.8 以上版本,或适用于 Mac/Windows 的 Docker。 有关详细信息,请参阅 Install Docker(安装 Docker)。 • 至少 2 GB 的...

jwenshan
05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
52分钟前
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部