gpt4 book ai didi

javascript - 如何使用 Node.js 和 Tedious 从单个连接/事务进行多个数据库调用

转载 作者:行者123 更新时间:2023-11-30 17:09:59 27 4
gpt4 key购买 nike

我正在尝试将 NodeJS 与 Tedious ( http://pekim.github.io/tedious/) sql server 插件一起使用来进行多个数据库调用。我的意图是:1.打开一个连接2.开始交易3.进行多次数据库(存储过程)调用,不会返回任何数据。4. 提交事务(或错误回滚)。5.关闭连接

这是 NodeJS 的示例 .js 文件(不使用事务),我在其中尝试进行多个数据库调用,但失败并显示错误“请求只能在登录状态下进行,而不是在 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!');

最佳答案

您正在尝试在未建立的连接上执行语句。在调用 executeStatement 之前,您缺少错误处理程序。

connection.on('connect', function (err) {
if (err) {
console.log(err); // replace with your code
return;
};

// If no error, then good to go...
executeStatement();
});

编辑:

如何串行执行事务中的多条语句:

var statements = ["select 1", "select 2", "select 3"];

var transaction = new sql.Transaction(connection);
transaction.begin(function(err) {
// ... error checks

async.mapSeries(statements, function(statement, next) {
var request = new sql.Request(transaction);
request.query(statement, next);
}, function(err, results) {
// ... error checks

transaction.commit(function(err, recordset) {
// ... error checks

console.log("Transaction commited.");
});
});
});

关于javascript - 如何使用 Node.js 和 Tedious 从单个连接/事务进行多个数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com