Sql server Node.js冗长的行是空数组,但行数正确

Sql server Node.js冗长的行是空数组,但行数正确,sql-server,node.js,express,tedious,Sql Server,Node.js,Express,Tedious,这是我正在运行的基本代码块。我已经按预期返回了行数(现在只有5个项目),但行作为空数组返回 我做错什么了吗?顺便说一下,我正在连接到SQLAzure。我没有任何连接问题,而且我相信我已经设置了正确的选项(RowCollectionnRequestCompletion为true) 有什么想法吗 var Connection = require('tedious').Connection; var Request = require('tedious').Request; exports.list

这是我正在运行的基本代码块。我已经按预期返回了行数(现在只有5个项目),但行作为空数组返回

我做错什么了吗?顺便说一下,我正在连接到SQLAzure。我没有任何连接问题,而且我相信我已经设置了正确的选项(RowCollectionnRequestCompletion为true)

有什么想法吗

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

exports.list = function(req, res){
    var connection = new Connection({
    "userName": "myCoolUsername",
    "password": "SoMePa$$word",
    "server": "something.database.windows.net",
    "options": {
        "database": "mySampleDbName",
        "encrypt": true,
        "rowCollectionOnDone": true,
        "rowCollectionOnRequestCompletion": true
    }
});

connection.on('connect', function(err){
    //if no error, then we are good to go.
    if(err){
        console.log(err);
    }else
    {
        var request = new Request("SELECT * FROM Products", function(err, rowCount, rows){
            console.log(rowCount);
            res.send(rows);
        })
        connection.execSql(request);
    }
});

这只是一个粗略的猜测,但从源代码看,当调用
procDone
事件时,会为行分配一个空数组。也许可以尝试将
rowCollectionOnDone
设置为false?此外,请求中似乎发出了一个
事件。你也可以订阅它,看看是否有输出。

我也有同样的问题。在请求对象上使用
rowCollectionOnDone:true
选项和
doneInProc
事件解决,如下所示。我不知道为什么回调函数在应该返回空数组的时候返回空数组

var config = {
    userName: '...',
    password: '...',
    server: 'localhost',
    options: {
        port: 2005,
        database: 'db1',
        rowCollectionOnDone: true
    }
}

connection.execSql(new Request('SELECT * FROM Products', function(err, rowCount, rows){
        if(err) {
            throw err;
        }
    })
    .on('doneInProc',function(rowCount, more, rows){
        console.log(rows); // not empty
    })
);

根据冗长的API

    callback
    function (err, rowCount, rows) { }
排 作为执行SQL语句的结果的行

仅当连接的config.options.rowCollectionOnRequestCompletion为true时才可用。


我必须使用这个配置来让它工作

     var config = {
    server: "localhost",
    database: "*****",
    userName: "sa",
    password: "******",
    port: 1433,
    options:{rowCollectionOnRequestCompletion:true}
};
    var dbConn = await this.db.connect(); // Here add your connection code in connect() function
    const allRows = [];
    return await new Promise((resolve,reject) => {
       var SELECT_QUERY = 'SELECT * FROM your_table ';
       const request = new Request(SELECT_QUERY, function(err, rowCount) {
            if (err) {
                return reject(err);
            } else {
                console.log(rowCount + ' rows');
            }
        });

        request.on('row', function(columns) {

            columns.forEach(function(column) {
                const row = [];
                row.push({
                    metadata: column.metadata,
                    value: column.value,
                    toString: () => column.value
                });
                allRows.push(row);
            });
        });

        request.on('doneProc', function (rowCount, more, returnStatus, rows) {
            console.log('onDoneProc');

            console.log('all rows',allRows);

            return resolve(allRows);
        });

        dbConn.execSql(request);

    });
关于守则:

  var request = new Request("SELECT * FROM Products", function(err, rowCount, rows) {
      console.log(rowCount);
      res.send(rows);
  })
出现此问题的原因是未定义行。此回调仅接收2个参数:

  var request = new Request("SELECT * FROM Products", function(err, rowCount) {
      console.log(rowCount);
      res.send(rows);
  })

我必须使用这个配置来让它工作

     var config = {
    server: "localhost",
    database: "*****",
    userName: "sa",
    password: "******",
    port: 1433,
    options:{rowCollectionOnRequestCompletion:true}
};
    var dbConn = await this.db.connect(); // Here add your connection code in connect() function
    const allRows = [];
    return await new Promise((resolve,reject) => {
       var SELECT_QUERY = 'SELECT * FROM your_table ';
       const request = new Request(SELECT_QUERY, function(err, rowCount) {
            if (err) {
                return reject(err);
            } else {
                console.log(rowCount + ' rows');
            }
        });

        request.on('row', function(columns) {

            columns.forEach(function(column) {
                const row = [];
                row.push({
                    metadata: column.metadata,
                    value: column.value,
                    toString: () => column.value
                });
                allRows.push(row);
            });
        });

        request.on('doneProc', function (rowCount, more, returnStatus, rows) {
            console.log('onDoneProc');

            console.log('all rows',allRows);

            return resolve(allRows);
        });

        dbConn.execSql(request);

    });
设置“RowCollectionnRequestCompletion”为true


嗨,菲利普。谢谢你的回答。请不要写诸如“rows=undefined=>此回调仅获取2个参数”之类的神秘消息。我读了好几遍才明白你在说什么。请以忙碌的专业人士能够快速理解的方式清楚地给出您的答案。干杯