nodejs封装mssql

对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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

Oracle基础知识-sqlplus使用

Oracle的sql*plus是与oracle进行交互的客户端工具。 在sql*plus中,可以运行sql*plus命令与sql*plus语句。 我们通常所说的...

20310
来自专栏MasiMaro 的技术博文

遍历系统中加载的驱动程序以及通过设备对象指针获取设备对象名称

遍历系统中加载的驱动可以在R3层完成,通过几个未导出的函数:ZwOpenDirectoryObject、ZwQueryDirectoryObject,下面是具体...

902
来自专栏杨建荣的学习笔记

物化视图相关的性能改进 (r7笔记第58天)

今天早上开发的一个同事找到我说他早上做了一个统计查询,但是感觉速度很慢,已经过了一个小时了还没有反应。想让我看看是什么情况。 我通过v$session查到有一个...

3275
来自专栏乐沙弥的世界

PL/SQL 包编译时hang住的处理

       最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。

766
来自专栏数据之美

Hive & Performance 学习笔记

注:本文来源于 Hortonworks 的 Adam Muise 在 July 23 2013 日的 Toronto Hadoop User Group 大会...

2765
来自专栏杨建荣的学习笔记

生产环境sql语句调优实战第九篇(r3笔记第34天)

生产环境中有一些sql语句是不定时炸弹,不声不响的运行着,可能相关的表很大,运行时间达数小时,甚至数天。 上周在生产环境中发现一条sql语句,运行时间几乎是按照...

3325
来自专栏杨建荣的学习笔记

生产环境大型sql语句调优实战第一篇(一) (r2笔记第31天)

在生产环境中有一条sql语句的性能极差,在早晨非高峰时段运行抽取数据,平均要花费40分钟,有时候竟然要跑10个多小时。 sql语句比较长,需要点耐心往下看。我对...

3224
来自专栏H2Cloud

使用ffpython嵌入和扩展python

ffpython ffpython is a c++ lib,which is to simplify task that embed python and e...

4038
来自专栏杨建荣的学习笔记

关于索引扫描的极速调优实战(第一篇) (r3笔记第81天)

一般在生产环境中,如果某个查询中涉及一个大表,走索引扫描是显然是最值得推荐的方式,但是索引扫描有unique index scan, range scan,sk...

2224
来自专栏difcareer的技术笔记

彻底弄懂dalvik字节码【二】

这个方法中先保存了前一个方法的状态,然后初始化当前方法的状态,比如设置pc指向方法的字节码开始处等。然后调用dvmInterpretPortable开始解释执行...

662

扫码关注云+社区