繁体   English   中英

如何使用node.js和连接池一次连接到SQLServer数据库?

[英]How to make multiple connections at once to a SQLServer database by using node.js and connection pooling?

我正在使用池连接使用SQLServer数据库构建node.js应用程序。 它有异步功能,每个记录完成后都应该将一条记录保存到数据库中。 问题是只插入10个异步任务的大约10条记录,其余的给出此错误“已经连接到数据库!在连接到不同的数据库之前调用close。”。

我试图编辑池的配置但是在风向标中。

var config = {
            host: "localhost",
            user: "test",
            password: "test",
            database: "testDB",
            server: '************',
            pool: {
                max: 20,
                maxWaitingClients:1,
                fifo:true,
                min: 0,
                idleTimeoutMillis: 30000
            }
        };

const pool = new sql.ConnectionPool(config);
pool.on('error', err => {
    console.error('SQLServer Pool Error: ', err.toString());
});

async writeToDB(System, url, PortListening, RequestTest, time, TestType, Request, Response, responseTime, pool) {
        try {
            var query = "INSERT INTO `testTable` " +
                "(SystemName,URL,PortListening,RequestTest,TestDate,TestType,Request,Response,ResponseTime) " +
                "VALUES " +
                "('" + System + "','" + url + "','" + PortListening + "','" + RequestTest + "','" + time + "','" + TestType + "',N'" + Request + "',N'" + Response + "'," + responseTime + ")";

            await pool.connect();
            let result =await  pool.request().query(query);

            return {success: result};
        } catch (err) {
            console.log(System);
            console.error(err);
            return {err: err};
        } finally {
            pool.close();
         }
    }

它应该插入所有异步任务中的所有行,而不会丢失任何数据。

从池设置中省略maxWaitingClients。 让客户自动照顾它。

我找到了答案。 我应该在应用程序启动时打开池“pool.connect()”,然后在应用程序关闭之前关闭它。 所以代码应该是这样的:

var config = {
        host: "localhost",
        user: "test",
        password: "test",
        database: "testDB",
        server: '************',
        pool: {
            max: 20,
            maxWaitingClients:1,
            fifo:true,
            min: 0,
            idleTimeoutMillis: 30000
        }
    };

const pool = new sql.ConnectionPool(config);
pool.on('error', err => {
    console.error('SQLServer Pool Error: ', err.toString());
});

pool.connect();

async writeToDB(System, url, PortListening, RequestTest, time, TestType, Request, Response, responseTime, pool) {
        try {
            var query = "INSERT INTO `testTable` " +
                "(SystemName,URL,PortListening,RequestTest,TestDate,TestType,Request,Response,ResponseTime) " +
                "VALUES " +
                "('" + System + "','" + url + "','" + PortListening + "','" + RequestTest + "','" + time + "','" + TestType + "',N'" + Request + "',N'" + Response + "'," + responseTime + ")";



     let result =await  pool.request().query(query);
    } catch (err) {
        return {err: err};
    } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM