查看: 1585|回复: 0

[分享] 如何实现数据库事务

[复制链接]

29

主题

32

帖子

483

积分

超级版主

Rank: 8Rank: 8

积分
483
发表于 2019-8-23 15:48:22 | 显示全部楼层 |阅读模式
本帖最后由 Alex 于 2019-8-23 15:51 编辑

数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成事务被提交给DBMS,则DBMS需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行
GeneXus中我们称事务为 Logical Unit of Work 。一样是可以使用rollback ,commit 的。那如何实现呢?


举例说明。现有Transaction :Company(公司信息) ,SysUser(系统用户信息) 。当新增系统用户数据成功后,需要更新公司信息中"已注册用户数"



1. 新建WebPanel :SysUserIns ,在Parttern中选择 Transaction  ,并且选择基于 BC .


备注:如果要基于BC , 需要设置 Transaction :SysUser 的 Business Compnenet 为true 。
选择后如下界面





2.  新建Procedure :AddData  ,此方法就用于事务。

备注:实现数据交互的四种方式:直接利用Transaction ,BC,For  each , New EndNew  .  BC 可以抓取失败情况,所以如果是事务的时候,我们使用BC去更新数据库。

3. 在SysUserIns 的确定按钮调用第二步中的AddData 即可。

---------------------------------------------------------------------
知识扩展:
事务不是非得代码写在一个Procedure 中,如第二步中的 更新Company 的代码可以写在另一个Procedure 中,然后在当前Procedure中调用也是可以的。但需要知道的是
每个Procedure 都有一个属性 Commit on exit   , 表示在退出时执行commit 操作。 所有如果是多个 Procedure 调用,可以将Procedure 的属性关闭,使用 commit 语句直接控制。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|GeneXus中国技术论坛

GMT+8, 2021-3-9 05:48 , Processed in 0.063428 second(s), 21 queries .

 

© 2019 GeneXus中国技术论坛

快速回复 返回顶部 返回列表