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

大卫·博扎克(DavidBožjak)

我正在使用带有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});
                                    }
                                });

错误:[msnodesql]无效的参数传递给函数query或queryRaw。

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

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

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

大卫·博扎克(DavidBožjak)

我知道了。事实证明,此语法与预期的有很大不同。我找不到与此相关的任何文档,就交易而言,我们似乎完全靠自己了。

我最终使用的是:

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});
    }
});

我发现此语法很麻烦,但可以。欢迎对此模式进行任何改进或提出建议!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义API移动服务Azure IOS

来自分类Dev

如何从Azure移动服务自定义Api调用方法?

来自分类Dev

使用C#后端注册Azure移动服务自定义API

来自分类Dev

在 Dialogflow 中使用自定义事件通过检测意图 API 调用事件

来自分类Dev

将Azure移动服务客户端SDK与非Azure托管自定义API结合使用

来自分类Dev

Azure移动服务,自定义API,更新输出并随后选择返回空结果

来自分类Dev

Azure移动服务自定义API多次调用SQL SP

来自分类Dev

带有自定义API的Javascript Windows Azure移动服务客户端

来自分类Dev

Azure移动服务自定义API在客户端上收到错误的请求

来自分类Dev

自定义API中针对Azure移动服务的多条路由的权限

来自分类Dev

Azure移动服务自定义API对多个GET操作的不同权限

来自分类Dev

缺少选项,无法从Visual Studio 2013添加用于Azure移动服务的自定义API

来自分类Dev

Azure移动服务自定义API对多个GET操作的不同权限

来自分类Dev

Azure移动服务:使用Java脚本后端进行自定义身份验证?

来自分类Dev

如何在 Linux 的 Azure 应用服务中使用自定义 DNS 服务器?

来自分类Dev

在移动服务自定义api中解析HTML

来自分类Dev

Azure移动应用程序自定义API异常

来自分类Dev

如何从自定义文本框中使用事件处理程序?

来自分类Dev

如何从自定义文本框中使用事件处理程序?

来自分类Dev

在ASP.NET Web API中使用事务

来自分类Dev

在ASP.NET Web API中使用事务

来自分类Dev

Microsoft Azure移动服务Javascript自定义API执行数据库存储过程权限问题

来自分类Dev

在Google API中使用自定义帐户而不是服务帐户

来自分类Dev

将自定义架构名称与Azure移动服务请求对象执行方法一起使用

来自分类Dev

在docker swarm中使用自定义服务发现

来自分类Dev

AngularJS在自定义服务中使用angular模块

来自分类Dev

AngularJs:在自定义服务中使用Cookie

来自分类Dev

AngularJS在自定义提供程序中使用自定义服务

来自分类Dev

Android-使用事件创建自定义日历

Related 相关文章

  1. 1

    自定义API移动服务Azure IOS

  2. 2

    如何从Azure移动服务自定义Api调用方法?

  3. 3

    使用C#后端注册Azure移动服务自定义API

  4. 4

    在 Dialogflow 中使用自定义事件通过检测意图 API 调用事件

  5. 5

    将Azure移动服务客户端SDK与非Azure托管自定义API结合使用

  6. 6

    Azure移动服务,自定义API,更新输出并随后选择返回空结果

  7. 7

    Azure移动服务自定义API多次调用SQL SP

  8. 8

    带有自定义API的Javascript Windows Azure移动服务客户端

  9. 9

    Azure移动服务自定义API在客户端上收到错误的请求

  10. 10

    自定义API中针对Azure移动服务的多条路由的权限

  11. 11

    Azure移动服务自定义API对多个GET操作的不同权限

  12. 12

    缺少选项,无法从Visual Studio 2013添加用于Azure移动服务的自定义API

  13. 13

    Azure移动服务自定义API对多个GET操作的不同权限

  14. 14

    Azure移动服务:使用Java脚本后端进行自定义身份验证?

  15. 15

    如何在 Linux 的 Azure 应用服务中使用自定义 DNS 服务器?

  16. 16

    在移动服务自定义api中解析HTML

  17. 17

    Azure移动应用程序自定义API异常

  18. 18

    如何从自定义文本框中使用事件处理程序?

  19. 19

    如何从自定义文本框中使用事件处理程序?

  20. 20

    在ASP.NET Web API中使用事务

  21. 21

    在ASP.NET Web API中使用事务

  22. 22

    Microsoft Azure移动服务Javascript自定义API执行数据库存储过程权限问题

  23. 23

    在Google API中使用自定义帐户而不是服务帐户

  24. 24

    将自定义架构名称与Azure移动服务请求对象执行方法一起使用

  25. 25

    在docker swarm中使用自定义服务发现

  26. 26

    AngularJS在自定义服务中使用angular模块

  27. 27

    AngularJs:在自定义服务中使用Cookie

  28. 28

    AngularJS在自定义提供程序中使用自定义服务

  29. 29

    Android-使用事件创建自定义日历

热门标签

归档