我正在尝试将NodeJS与Tedious(http://pekim.github.io/tedious/)sql服务器插件一起使用来进行多个数据库调用。我的意图是: 1.打开连接 2.开始一个事务 3.进行多个数据库(存储过程)调用,这将不会返回任何数据。 4.提交事务(或回滚出错)。 5.关闭连接如何使用Node.js和Tedious从单个连接/事务中进行多个数据库调用
下面是一个示例.js文件,(不使用事务)用于NodeJS,我尝试进行多个数据库调用,并且出现错误“请求只能在LoggedIn中进行状态,而不是SentClientRequest状态。“我没有尝试解决这个问题。
有谁知道如何解决这个问题?
var Connection = require('tedious').Connection;
var Request = require('tedious').Request;
var config = {
userName: 'login',
password: 'password',
server: '127.0.0.1',
options: { rowCollectionOnDone: true }
};
var max = 1;
for (var i = 0; i < max; i++) {
var connection = new Connection(config);
function executeStatement() {
request = new Request("select 42, 'hello world'", function (err, rowCount) {
if (err) {
console.log(err);
} else {
console.log(rowCount + ' rows');
}
});
request.on('row', function (columns) {
columns.forEach(function (column) {
console.log(column.value);
});
});
request.on('doneInProc', function (rowCount, more, rows) {
});
request.on('doneProc', function (rowCount, more, rows) {
console.log('statement completed!')
connection.execSql(request);
});
request.on('returnStatus', function (status) {
console.log('statement completed!')
});
connection.execSql(request);
}
connection.on('connect', function (err) {
// If no error, then good to go...
executeStatement();
});
}
console.log('Done!');
你是正确的,应该在连接上进行错误检查,但这不是问题。我只能在连接上执行一条sql语句。问题是如何在连接上执行多个语句,串行。这样我就可以在事务中批量处理多个命令。我可能会有太多的语句在一次调用中链接在一起来执行sql。 – 2014-12-04 02:01:02
在上一个完成之前,您不得执行语句。为了确保您应该使用(或编写自己的)异步库,如'async'。 – 2014-12-04 14:42:42
我已经用示例更新了我的答案,如何在使用异步的事务中执行多个语句。 – 2014-12-04 14:54:17