在节点中关闭MSSQL连接

红宝石哈里斯

我正在使用Electron应用程序中的Node mssql程序包与SQL Server连接
我无法创建REST API。

尽管我有担心,但它工作正常:

  • 查询后它不会关闭SQL连接
  • 它为每个查询建立一个新的数据库连接

那样行吗?

工作原理:
app.js进行2次查询并记录结果
sql.js与数据库的连接

// app.js
const { getUser, getUsers } = require('./sql');

getUser(10).then((result) => {
    console.dir(result);
});

getUsers.then((result) => {
    console.dir(result);
})

// sql.js
const sql = require("mssql");

// DB credentials
const config = {
    user: 'myuser',
    password: '123',
    server: 'myserver',
    database: 'mydb',
    options: {
        encrypt: true
    }
}

// Creates new connection pool for each query
function connectDB() {
    const pool = new sql.ConnectionPool(config);

    return pool.connect()
        .then(pool => {
            console.log('Connected to database');

            // returns Promise
            return pool;
        })
        .catch(err => console.log('Database connection failed!', err));
}

// 1st query
function getUser(id) {
    const connection = connectDB();

    return connection
        .then(pool => {
            return pool.request()
                .input('PK_ID', sql.Int, parseInt(id))
                .execute('[uspGetUser]');
        })
        .then(result => {
            return result.recordset[0];
        })
        .catch(err => {
            console.log('Query failed!', err);
        });
}

// 2nd query
function getUsers() {
    const DB = connectDB();

    return DB
        .then(pool => {
            return pool.request()
                .execute('[uspGetUsers]');
        })
        .then(result => {
            return result.recordset[0];
        })
        .catch(err => {
            console.log('Query failed!', err);
        });
}

module.exports = {
    getUser,
    getUsers
}
红宝石哈里斯

解决了!

要关闭数据库连接并返回结果,我们可以使用finally语句和asnyc / await函数。

最后声明中,您可以执行代码,try和catch后,无论结果如何。

// sql.js
const sql = require("mssql");

// DB credentials
const config = {
    user: 'myuser',
    password: '123',
    server: 'myserver',
    database: 'mydb',
    options: {
        encrypt: true
    }
}

async function connectDB() {
    const pool = new sql.ConnectionPool(config);

    try {
        await pool.connect();
        console.log('Connected to database');

        return pool;
    }
    catch(err) {
        console.log('Database connection failed!', err);

        return err;
    }
}

async function getAll() {
    const DB = await connectDB();

    try {
        const result = await DB.request()
            .query('select * from [your_table]');

        return result.recordset;
    }
    catch (err) {
        console.log('Error querying database', err);

        return err;
    }
    finally {
        DB.close();
    }
}

async function execute() {
    let result = await getAll();
    console.dir(JSON.stringify(result));

    return result;
}

execute();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章