全局连接已存在问题node.js

时间:2017-07-03 09:31:11

标签: sql-server node.js

我使用下面的代码

将MSSQl与node.js连接起来
           var sql = require('mssql')
            var config ={
            server:'xxxx',
            database:'xxxx',
            user:'xxx',
            password:'xxx',
            port:'xx'
            };
            sql.connect(dbconfig, function (err) {

                if (err) console.log(err);

                  var sqlquery='';
                const request = new sql.Request();
                if(condition)
        {
            //query to the database and get the repo value
                sqlquery='select * from verylargetable'; 
                request.query(sqlquery, function (err, result) {
                    if (err) console.log(err)
                   var repo=result.recordset[0].Repo;

         //query to the database and get the comm value
                  sqlquery="select commit from verylargetable where Repo='"+repo+"'"; 
                request.query(sqlquery, function (err, result) {
                    if (err) console.log(err)
                  var comm=result.recordset[0].Comm;
                 if (result.recordset.length  > 0) 
        {
//query to the database and update the table
         sqlquery="UPDATE verylargetable set Repo='"+repo+"', WHERE Comm='"+comm+"'";
        request.query(sqlquery, function (err,result){
                 if (err) console.log(err)
                   console.log("record(s) updated");
               });
              }
           });
         });
        }
        else
        {
        //query to the database and get the repo value
                sqlquery='select * from verylargetable'; 
                request.query(sqlquery, function (err, result) {
                    if (err) console.log(err)
                   var repo=result.recordset[0].Repo;
    //query to the databaseto insert new record
        sqlquery ="INSERT INTO verylargetable VALUES("+repo+"','"+comm+"',1)"; 
    request.query(sqlquery, function (err, result) {
            if (err) console.log(err)
           });
        });
       }
    });

基于某些条件必须执行查询。在执行时,这些查询会正确更新。但有时会遇到问题

全局连接已存在。首先调用sql.close()。

当我最后使用sql.close()时,我无法在下次初始化连接。

面对连接已关闭问题。

我有单独的数据库更改方法。我需要在方法的开头建立连接,并且必须在结束时关闭。在它们之间必须执行所有查询。 请让我知道如何正确打开和关闭连接?

2 个答案:

答案 0 :(得分:0)

sql.connect返回连接,为了关闭连接,只需在结果上调用close。

var pool = sql.connect(dbconfig, function (err) {
    if (err) console.log(err);
    const request = new sql.Request()
    var sqlquery='select * from verylargetable';
    request.query(sqlquery, function (err, result) {
        if (err) console.log(err)
    });
});

pool.close();

答案 1 :(得分:0)

我遇到了同样的问题并通过以下实施解决了这个问题, 处理全局连接已存在。首先调用sql.close()我们需要为mssql创建一个连接池npm版本4.0.4

const config = {
user: '**',
password: '**',
server: '** or localhost',
database: '**',
pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 30000
}}
router.get('/SQLConnection1', function (req, res, next) {
const pool1 = new sql.ConnectionPool(config, err => {
    // ... error checks 

    // Query 

    pool1.request() // or: new sql.Request(pool1) 
        .query('SELECT ID,Name  from Avatar', (err, result) => {
            // ... error checks 

            console.dir(result)
            res.json({'Result': result})
        })
})
pool1.on('error', err => {
    // ... error handler 
    console.log('Error ' + err);
})

});