我正在尝试在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”返回到控制台的列表中,并且连接似乎永远不会出现,并且脚本永远不会关闭。
如何获取查询结果并继续前进?
答案 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()