3

これが私が実行しているコードの基本的なチャンクです。期待どおりに RowCount が戻ってきましたが (現在は 5 つの項目しかありません)、行は空の配列として返されます。

私は何か間違ったことをしていますか?ちなみに私はSQL azureに接続しています。接続に問題はなく、正しいオプション (rowCollectionOnRequestCompletion を 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);
    }
});
4

6 に答える 6

8

私も同じ問題を抱えていました。以下のように Request オブジェクトの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
    })
);
于 2014-03-10T17:27:41.903 に答える
3

この構成を使用して機能させる必要がありました

    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);

    });
于 2019-05-25T05:16:16.263 に答える
0

これは単なる推測ですが、ソースを見ると、procDoneイベントが呼び出されると行に空の配列が割り当てられます。おそらく、rowCollectionOnDonefalse に設定してみてください。また、rowリクエスト時に発行されるイベントがあるようです。それをサブスクライブして、出力が得られるかどうかを確認することもできます。

于 2013-06-27T08:01:41.800 に答える
0

「rowCollectionOnRequestCompletion」を true に設定

var config = {
    ...
    options : {
        rowCollectionOnRequestCompletion : true   // add this line
    }
}
于 2020-12-05T06:56:12.080 に答える