2017-08-11 146 views
1

我試圖從NodeJs連接SQL數據庫,但得到此錯誤: 查詢數據庫時出錯: - ConnectionError:連接尚未打開。從NodeJs連接SQL數據庫 - ConnectionError:連接尚未打開

var executeQuery = function(res, query){ 
    var conn = new sql.ConnectionPool(dbConfig); 
    conn.connect().then(function() { 


         // create Request object 
         var request = new sql.Request(conn); 
         // query to the database 
         request.query(query, function (err, queryResult) { 
          if (err) { 
             console.log("Error while querying database :- " + err); 
             res.send(err); 
            } 
            else { 

             res.send(queryResult); 

              } 
           }); 


          conn.close(); 
     });   
} 

請幫忙。

謝謝 詹姆斯

+0

你可以包括你需要聲明'SQL =要求( 「...?!?」);'? – drinchev

+0

@kumbhanibhavesh我得到的錯誤是ConnectionError:連接尚未打開。 – Amal

回答

1

connection pool類將返回一個承諾,這與通過你的連接發起的池解析:

var executeQuery = function(res, query) { 

    var conn = new sql.ConnectionPool(dbConfig); 

    conn.connect() 
     .then(function (pool) { 
      // ^the pool that is created and should be used 

      // create Request object 
      var request = new sql.Request(pool); 
      //       ^the pool from the promise 

      // query to the database 
      request.query(query, function (err, queryResult) { 
       if (err) { 
        console.log("Error while querying database :- " + err); 
        res.send(err); 
       } else { 
        res.send(queryResult); 
       } 
      }); 
      conn.close(); 
     });   
} 

在你的情況conn變量始終是承諾,而不是連接本身。

從文檔連接池的一個基本的例子如下:

new sql.ConnectionPool(config).connect().then(pool => { 
    return pool.query`select * from mytable where id = ${value}` 
}).then(result => { 
    console.dir(result) 
}).catch(err => { 
    // ... error checks 
}) 
+0

@drichev嗨,請您詳細說明一下嗎?我需要的語句是:** sql = require(「mssql」); ** 您的意思是,我應該創建一個數據庫池? 你能爲我示範嗎? – Amal

+0

只要你粘貼你想創建一個連接池並使用它來進行查詢和請求。有兩種方法可以做到這一點。 1用Promise和2用回調。當你用Promise(沒有提供回調函數)使用它時,你實際上需要將承諾解析結果作爲你的'pool'變量。 – drinchev

+0

如果可能,請在我的代碼中編輯相同的代碼以顯示相同的代碼?我對此很陌生,所以不能很好地把握。 – Amal