javascript - 每个连接请求 Node JS 和 SQL?

标签 javascript sql node.js azure azure-sql-database

我似乎无法从一个数据库连接发出多个请求。它总是告诉我只能在登录状态下发出请求。

例如,如下面的代码所示:函数的 getCarIdandOwner 部分将正常触发。但是 getChargeRate 不会。

我尝试像这样组合它们:

connection.execSqlBatch(getcarIdandOwner, getChargeRate);

但是这也不起作用,因为它告诉我 getChargeRate 未定义。

使用 Visual Studio Community,安装 NPM:Underscore 和 Tedious(用于 sql)。现在只需将其作为控制台应用程序运行以进行测试。

var Connection = require('tedious').Connection;
var config = {
    userName: 'user',
    password: 'passs',
    server: 'somewhere.database.windows.net',
    options: {
        encrypt: true,
        database: 'db-Test',
        useColumnNames: true
var connection = new Connection(config);

connection.on('connect', function (err) {
    // If no error, then good to proceed.  
    console.log("Connected".green);
    toll("******-b77c-40e0-8f26-d44e98bc7264", "be45c903-****-****-b6ba-4b2fefa3d6b0");
}); 

function toll(chipId, locId) {
    var carId = '';
    var userOwner = '';
    var charge = '';
    var userBalance = '';

    getcarIdandOwner = new Request(`SELECT car_id, userOwner FROM Cars WHERE carChipId = '${chipId}'`, function (err) {
        if (err) {
            console.log(err);
        }
    });

    getcarIdandOwner.on('row', function (columns) {
        carId = columns.car_id.value;
        userOwner = columns.userOwner.value;
        console.log('carId: ', carId, ' userOwner: ', userOwner);
    });
    getcarIdandOwner.on('done', function (rowCount, more) {
        console.log(rowCount + ' rows returned');
        if (rowCount = 1) {
            console.log('Car Rows Returned Ok'.green);
        } else {
            console.log('Fatal Error: More than 1 Car Row Returned'.red);
        };
    });
    connection.execSqlBatch(getcarIdandOwner);

    getChargeRate = new Request(`SELECT Charge FROM locations WHERE location_id = '${locId}'`, function (err) {
        if (err) {
            console.log(err);
        }
    });
    getChargeRate.on('row', function (columns) {
        charge = columns.charge.value;
        console.log('Charging account: ', userOwner, '$', charge);
    });

    connection.execSqlBatch(getChargeRate);
}

最佳答案

http://tediousjs.github.io/tedious/api-connection.html 有一些文档其中指出:

Only one request at a time may be executed on a connection. Once a Request has been initiated (with callProcedure, execSql, or execSqlBatch), another should not be initiated until the Request's completion callback is called.

所以你的代码应该是这样的:

function toll(chipId, locId) {
    var carId = '';
    var userOwner = '';
    var charge = '';
    var userBalance = '';

    getcarIdandOwner = new Request(`SELECT car_id, userOwner FROM Cars WHERE carChipId = '${chipId}'`, function (err) {
        if (err) {
            console.log(err);
        } else {
            getChargeRate = new Request(`SELECT Charge FROM locations WHERE location_id = '${locId}'`, function (err) {
                if (err) {
                    console.log(err);
                }
            });
            getChargeRate.on('row', function (columns) {
                charge = columns.charge.value;
                console.log('Charging account: ', userOwner, '$', charge);
            });
            connection.execSql(getChargeRate);
        }
    });

    getcarIdandOwner.on('row', function (columns) {
        carId = columns.car_id.value;
        userOwner = columns.userOwner.value;
        console.log('carId: ', carId, ' userOwner: ', userOwner);
    });
    getcarIdandOwner.on('done', function (rowCount, more) {
        console.log(rowCount + ' rows returned');
        if (rowCount = 1) {
            console.log('Car Rows Returned Ok'.green);
        } else {
            console.log('Fatal Error: More than 1 Car Row Returned'.red);
        };
    });
    connection.execSqlBatch(getcarIdandOwner);

}

关于javascript - 每个连接请求 Node JS 和 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41399882/

相关文章:

javascript - 使用 Canvas 设置超时

javascript - 通过 mysql npm 包更新时出错

javascript - _.find 是否返回对象的引用?如何正确设置结果的属性?

javascript - 全日历事件开始时间

javascript - 如何将外部 css 导入到 typescript 元素中

javascript - 对象中的数字键在 Firefox 中给出错误 ("SyntaxError: missing ; before statement")

sql - 将行转换为 Oracle 10g 中的列

mysql - 如何在 SQL 中将选定的日期列格式化为相对时间格式

sql - 将列内包含 JSON 数组的行扩展到多行

javascript - 在 Electron 应用程序中将本地文件加载到 iframe 中