gpt4 book ai didi

javascript - 在 Azure 移动服务自定义 API 中使用事务

转载 作者:行者123 更新时间:2023-11-29 10:14:31 25 4
gpt4 key购买 nike

我正在使用带有 JavaScript 后端的 Azure 移动服务来执行自定义 API。

我需要执行几个独立的sql语句(删除、更新)。我需要一个事务来确保只有在所有 sql 语句都成功时才提交。

我发现很难找到很多与此相关的文档。

我从这里开始http://msdn.microsoft.com/en-us/library/jj554212.aspx ,并按照指示调用connection.beginTransaction()

mssql.open({
success: function(connection) {

connection.beginTransaction();
...

我不知道应该如何继续。如果我随后尝试使用连接对象执行正常的删除 sql 语句,则会收到以下错误:

connection.query(deleteStatement, [parameter1, ], {
success: function(results)
{
connection.commit();
response.send(statusCodes.OK, { message : '' });
},
error: function(err) {
connection.rollback();
console.log("error: " + err);
response.send(statusCodes.Error, {message : err});
}
});

Error: [msnodesql] Invalid parameter(s) passed to function query or queryRaw.

另一方面,如果我在原始 mssql 对象上执行相同的查询(使用相同的语法),则connection.commit()和connection.rollback()语句似乎什么也不做。查询有效,项目确实被删除...但即使我调用 connection.rollback() 作为最后一步,它们也会被删除。

我希望我应该以某种方式调用connection.query并传入事务......。我找不到任何与此相关的文档。

如何在 Azure 移动服务 - 自定义 API(javascript 后端)中正确实现事务?谢谢!

最佳答案

我让它工作了。事实证明,其语法与预期有很大不同。我找不到任何与此相关的文档,看起来我们在交易方面几乎是靠我们自己。

这就是我最终使用的:

var mssql = request.service.mssql;

mssql.open({
success: function(connection) {
connection.beginTransaction( function (error)
{
var statement1 = 'delete ... where X = ?'

connection.query(statement1, [parameter1, ], function(err, results)
{
if (!isBlank(err))
{
console.log("Error:" + err);
connection.rollback();
response.send(statusCodes.Error, {message : ''});
connection.close();
return;
}

var statement2 = 'delete ... where X = ?'

connection.query(statement2, [parameter2, ], function(err, results)
{
if (!isBlank(err))
{
console.log("Error:" + err);
connection.rollback();
response.send(statusCodes.Error, {message : ''});
connection.close();
return;
}
else
{
//daisy chain more statements if necessary. When the last one succeeds:
connection.commit();
response.send(statusCodes.OK, { message : '' });
connection.close();
}
}
});
}
},
error: function(err) {
console.log("Error : " + err);
response.send(statusCodes.Error, {message : err});
}
});

我觉得这个语法很麻烦,但它确实有效。对此模式的任何改进或建议都非常受欢迎!

关于javascript - 在 Azure 移动服务自定义 API 中使用事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486480/

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