所以这是我正在运行的基本代码块。我已经按预期返回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);
}
});
答案 0 :(得分:6)
我遇到了同样的问题。在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
})
);
答案 1 :(得分:2)
关于代码:
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);
})
答案 2 :(得分:1)
根据Tedious API
callback
function (err, rowCount, rows) { }
行 执行SQL语句的行。
仅当Connection的config.options.rowCollectionOnRequestCompletion为true时才可用。
我必须使用此配置才能使其正常工作
var config = {
server: "localhost",
database: "*****",
userName: "sa",
password: "******",
port: 1433,
options:{rowCollectionOnRequestCompletion:true}
};
答案 3 :(得分:0)
这只是一个疯狂的猜测,但是查看源代码时,在调用procDone
事件时,行会被分配一个空数组。也许,尝试将rowCollectionOnDone
设置为false?此外,请求上似乎发生了row
事件。您也可以订阅它,看看是否可以获得任何输出。
答案 4 :(得分:0)
我必须使用此配置才能使它工作
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);
});
答案 5 :(得分:0)
设置“ rowCollectionOnRequestCompletion”为真
var config = {
...
options : {
rowCollectionOnRequestCompletion : true // add this line
}
}