我使用带有javascript后端的天蓝色移动服务来执行自定义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});
}
});
错误:[msnodesql]传递给函数查询的无效参数或 queryRaw。
另一方面,如果我在原始mssql对象上执行相同的查询(具有相同的语法),则看起来connection.commit()和connection.rollback()语句不执行任何操作。查询工作,项目确实被删除...但即使我调用connection.rollback()作为最后一步,它们也会被删除。
我希望我应该调用connection.query并以某种方式传递事务。我找不到任何关于此的文件。
如何在Azure移动服务中正确实现事务 - 自定义API(javascript后端)?谢谢!
答案 0 :(得分:3)
我得到了它的工作。事实证明,这种语法与预期的有很大不同。我无法找到任何关于此的文档,看起来我们在交易时几乎都是我们自己。
这是我最终使用的:
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});
}
});
我发现这种语法很麻烦,但它确实有用。对这种模式的任何改进或建议都非常受欢迎!
答案 1 :(得分:1)
mssql.open函数返回node-sqlserver.open的对象;它只是用你的连接字符串管道。我们正在努力更新此文档。您可以查看node-sqlserver的github项目并查看单元测试:https://github.com/Azure/node-sqlserver
积极为此修复文档 - 抱歉给您带来了麻烦。