zoukankan      html  css  js  c++  java
  • kbmMW RunInTransaction

    同事写了一个存储过程,用来计算库存表,数据库是sql server,然后利用kbmMWClientStoreProc来调用。因为在存储过程中使用了事务,当库存不足时,Rollback事务并提升级异常,这时候,产生个错误,大意是事务不配对。

    跟踪代码,发现当客户端kbmMWClientStoreProc调用存储过程,转到服务端后,由查询服务(QueryService)来处理,而查询服务又是利用其属性StoreProc指定的对象来执行存储过程,对于我来说,用的是kbmMWuniDACStoreProc控件。

    现在我们把焦点放到kbmMWuniDACStoreProc上,他有一个属性RunInTransaction,默认为True,再查看代码,当为True时,kbmMWuniDACStoreProc执行存储过程时会自动开启事务,发生异常回滚事务,正常执行则提交事务。为False时,则在执行存储过程时,不用事务。

    正因如此,kbmMWuniDACStoreProc开启了事务,而在存储过程中又开启了事务,造成出错了,按理说,事务都是配对的,也不应该出错。用的sql server 2008,可能是这个原因,sqlserver 2008不支持吧,没有进一步查证。

    现在把RunInTransaction设置为False,再执行,问题解决,换一种方法,RunInTransaction依旧为True,在存储过程中去掉了事务,只是提升异常,问题也解决。

    如果在客户端的kbmMWClientStoreProc组件能有个属性来指定是否在服务端开启事务就好了!可惜没有查到。

  • 相关阅读:
    一套C#语言的日志控制系统
    unity自义定摇杆
    2014 西安邀请赛小结
    Poj 1112 Team Them Up!
    Poj 1112 Rebuilding Roads(树形DP+背包)
    USACO Cow Pedigrees
    Poj 2284 That Nice Euler Circuit
    LA 3942 Remember the Word
    HDU 3065 病毒侵袭持续中
    HDU 2896 病毒侵袭
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14028429.html
Copyright © 2011-2022 走看看