node.js 通过tedious 连接SQL SERVER

github地址: https://github.com/tediousjs/tedious

安装:  npm install tedious

例子:

	
	var Connection = require('tedious').Connection;
	var Request = require('tedious').Request;
	var connection = new Connection({
			'userName':'sa',                    //用户名
			'password':'123456',		    //密码
			'server':'127.0.0.1',               //数据库地址
			'options':{
				'port':1433,                //端口号
				'database':'test',          //数据库名
				'encrypt':true              //是否启用加密传输,测试了两台机器,一台开了无法连接
			}
	    });
	connection.on('connect',function(err){
			//判断有没有出错
			if(err){
				console.log(err);
			}else{
				//生成sql执行语句,并指定接收数据完毕后执行的回调函数
				var request = new Request('select * from tt',function(err,rowCount){
					//判断有没有出错
					if(err){
						console.log(err);
					}
					else rows['rowCount'] = rowCount; //rowCount是语句执行影响行数
					console.log(rows);
					connection.close();               //记得关闭连接
				});
				var rows = {};
				var n = 0;
				//查询数据返回,select才有返回,每次一行记录
				request.on('row',function(columns){
					rows[n] = {};
					//遍历出列名和值
					columns.forEach(function(s){
						rows[n][s.metadata.colName] = s.value;   //列名和值
					});
					n++;
				});
				//执行状态返回
				request.on('doneProc',function(r,m,status){
					//成功返回0,一般不会用到,在Request的回调判断err即可
					if(status)
						rows = request;
				});
				//执行语句
				connection.execSql(request);
			}

	     });


如果想执行 insert语句后返回id,可以在回调里再执行:

	request = new Request("select @@identity",function(err, rowCount){    //这个是返回插入成功的id
		callback(param);                                                  //把查询结果返回给回调函数
	});
	request.on('row', function(columns) { 
		param['id'] = columns[0].value;   //获取id
	});   
	connection.execSql(request);
						


封装起来比较方便使用:

	var Connection = require('tedious').Connection;
	var Request = require('tedious').Request;

	exports.mssql = function(config){
		this.connection = new Connection(config);
		
		this.query = function(str,callback){          //执行查询
			var connection = this.connection;
			var rows={};
			connection.on('connect', function(err){                 //连接数据库,执行匿名函数
				if(err){
					callback({'err':err['message']+'请检查账号、密码是否正确,且数据库存在'});
				}else{
					var request = new Request(str,function(err, rowCount){ 	
						if(err)err = {'err':err['message']};
						callback(err,rows);
						connection.close();
					});
					
					var n=0;					
					request.on('row', function(columns) {                            //查询成功数据返回
						rows[n]={};
						columns.forEach(function(column) {
								rows[n][column.metadata.colName] = column.value;		//获取数据			
						});
						n++;
					});
				
					connection.execSql(request);                                 //执行sql语句
				}
			});
		}
		
	}
保存成 mssql.js,然后在这样使用:


     var mssql = require('./mssql.js');
     var conn = new mssql.mssql({'userName':'sa','password':'123456','server':'127.0.0.1','options':{'port':1344,'database':'test'}});
     conn.query('select * from tt', function(err,data){
		if(!err){
			console.log(data)       //成功返回数据
		}else {
			console.log(err)      //出错返回
		}						
     ); 




  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值