我正在嘗試將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