使用node.js中的mssql关闭MSSQL连接

时间:2017-08-14 19:29:39

标签: javascript sql-server node.js

我正在尝试在node.js中编写一个脚本来查询MSSQL数据库。我是javascript的新手,是node.js的新手,是VSCode的新手,但我知道一些关于SQL的东西。我有工作代码,但连接似乎永远不会关闭,我无法获得函数的值OUT。

所以,我有这段代码,我从npm的例子中得到了:

const sql = require('mssql');
var dbConfig = {
    server:'theServer',
    database:'theDB',
    user:'un',
    password:'pw',
    port:1433
};

sql.connect(dbConfig).then(pool => {
    // Query     
    return pool.request()
    .query('select top 10 * from THE_TABLE')
}).then(result => {
    console.log(result);
}).catch(err => {
    // ... error checks
})

这有效,我可以看到10个结果记录在控制台中。但是,代码永远不会停止运行。如何获得关闭和停止的连接?

我真的希望将结果保存到变量中,因此我将代码更改为:

const sql = require('mssql');
var dbConfig = {
    server:'theServer',
    database:'theDB',
    user:'un',
    password:'pw',
    port:1433
};

let theList;
sql.connect(dbConfig).then(pool => {
    // Query     
    return pool.request()
    .query('select top 10 * from THE_TABLE')
}).then(result => {
    theList= result;
}).catch(err => {
    // ... error checks
})

console.log(theList);

这会将“undefined”返回到控制台的列表中,并且连接似乎永远不会出现,并且脚本永远不会关闭。

如何获取查询结果并继续前进?

4 个答案:

答案 0 :(得分:3)

这对我有用。有一个.close()方法。

const DB = require("mssql")
const config = require("./config.json")
DB.connect(config)
   .then((conn) => 
      conn.query("SELECT * FROM table1")
         .then((v) => console.log(v))
         .then(() => conn.close())
   )

答案 1 :(得分:0)

你应该致电

process.exit()

最后。来源Node Docs

此外

sql.connect(dbConfig).then(pool => {
    // Query     
    return pool.request()
    .query('select top 10 * from THE_TABLE')
}).then(result => {
    theList= result;
}).catch(err => {
    // ... error checks
})

是异步函数

console.log(theList);

不会等待它更新值。

我想你想做

sql.connect(dbConfig).then(pool => {
    // Query     
    return pool.request()
    .query('select top 10 * from THE_TABLE')
}).then(result => {
    theList= result;
}).catch(err => {
    // ... error checks
}).then(function(){
  console.log(theList);
  process.exit(1);
})

答案 2 :(得分:0)

之所以会这样,是因为Promise是异步的,然后会在执行console.log(theList);时对数据库的查询仍在进行中,因此List会打印未定义,因为没有为其分配任何值。

按照您的代码,如果您的Node.js版本为7.6.0或更高,则可以执行以下操作:

const sql = require('mssql');
var dbConfig = {
    server: 'theServer',
    database: 'theDB',
    user: 'un',
    password: 'pw',
    port: 1433
};

let theList;

function executeQuery() {
    return sql.connect(dbConfig).then(pool => {
        // Query     
        return pool.request()
            .query('select top 10 * from THE_TABLE')
    }).then(result => {
        theList = result;
    }).catch(err => {
        // ... error checks
    })
}

async function getData() {
    await executeQuery();
    console.log(theList);
}

getData();

答案 3 :(得分:0)

使用异步/等待

以下是使用async await打开连接,查询和关闭的方法

const sql = require('mssql/msnodesqlv8')

let config = {
    driver: "msnodesqlv8",
    server: serverName,
    database: databaseName,
    options: { trustedConnection: true }
};

// connect to db
let cnn = await sql.connect(config)

// query
let result = await sql.query(query)

// close connection
await cnn.close()