Foxtable(狐表)用户栏目专家坐堂 → 事务代码如何修改


  共有1771人关注过本帖树形打印复制链接

主题:事务代码如何修改

帅哥哟,离线,有人找我吗?
lin98
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
事务代码如何修改  发帖心情 Post By:2024/8/10 10:59:00 [只看该作者]

需求:如果事务成功,表1的数据导入表2后,清空表1的数据,如果事务失败,回滚事务,回滚表1的数据,下面代码如何改?MYSQL数据源
Dim db = HySq-l.DataBaseFactory.CreateDatabase()  '获取数据库对象
Dim tran = db.BeginTransaction()  '开始一个事务
Dim sq-l As String = "INSERT INTO table2 (id, data) SELEC-T id, data FROM table1;" 
Try  
    Dim res As Integer = db.ExecuteNonQuery(tran, sq-l, New HySq-l.ParameterPair("折扣", 0.3), New HySq-l.ParameterPair("客户", "abc"))  
    res = db.ExecuteNonQuery(tran, sq-l, New HySq-l.ParameterPair("折扣", 0.2), New HySq-l.ParameterPair("客户", "CS01"))  
    If res = 0 Then  
        db.RollbackTransaction(tran, True)  '回滚事务,同时关闭数据库连接
        msgbox("取消事务")  
    Else  
        db.CommitTransaction(tran, True)  '提交事务,同时关闭数据库连接
        msgbox("执行成功")  

   删除表1
msgbox("表1已清空") 

    End If  
Catch ex As Exception  
    db.RollbackTransaction(tran, True)  '回滚事务,同时关闭数据库连接
    msgbox("取消事务,原因:" & ex.Message)  
End Try  


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/10 11:04:00 [只看该作者]

不需要改什么。事务失败表1就不会删除,还回滚表1什么!

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/10 11:35:00 [只看该作者]

Dim res As Integer = db.ExecuteNonQuery(tran, sq-l, New HySq-l.ParameterPair("折扣", 0.3), New HySq-l.ParameterPair("客户", "abc"))  
    res = db.ExecuteNonQuery(tran, sq-l, New HySq-l.ParameterPair("折扣", 0.2), New HySq-l.ParameterPair("客户", "CS01"))  
问题一:这个是什么意思,没太理解,看帮助,好象是修改,配合修改,对指定字段的修改,是否这种理解?
问题二:这二行是配合修改,对表与表之间的复制,导入或删除没关系,是否可以删除?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/10 11:46:00 [只看该作者]

ExecuteNonQuery就是用来执行一条sql。使用参数化的方式执行,具体请去看组件的帮助

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/16 10:16:00 [只看该作者]

Dim db = HySq-l.DataBaseFactory.CreateDatabase()  '获取数据库对象
Dim tran = db.BeginTransaction()  '开始一个事务
Dim sq-l As String = "INSERT INTO table2 (id, data) SELEC-T id, data FROM table1;" 
Try  
    Dim res As Integer = db.ExecuteNonQuery(tran, sq-l, New HySq-l.ParameterPair("折扣", 0.3), New HySq-l.ParameterPair("客户", "abc"))  
    res = db.ExecuteNonQuery(tran, sq-l, New HySq-l.ParameterPair("折扣", 0.2), New HySq-l.ParameterPair("客户", "CS01"))  
    If res = 0 Then  
        db.RollbackTransaction(tran, True)  '回滚事务,同时关闭数据库连接
        msgbox("取消事务")  
    Else  

        db.CommitTransaction(tran, True)  '提交事务,同时关闭数据库连接
        msgbox("执行成功")  

   删除表1,SQL=删除语句


    End If  
Catch ex As Exception  
    db.RollbackTransaction(tran, True)  '回滚事务,同时关闭数据库连接
    msgbox("取消事务,原因:" & ex.Message)  
End Try  

问题1;需求是导入数据,删除来源表的事务,删除来源表代码是放在上面代码位置?还是放在哪里?是否还在失放资源的动作?
问题2:一个按键单击事件,有多个事务,狐表的操作代码(导入,复制,查询)事件,是否可以同放一个按键里?其程序运行先后如何处理?



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/16 10:25:00 [只看该作者]

Try  
    Dim res As Integer = db.ExecuteNonQuery(tran, sq-l)  
if res > 0 then
    res = db.ExecuteNonQuery(tran, “delete from table1 ”)  
    If res = 0 Then  
        db.RollbackTransaction(tran, True)  '回滚事务,同时关闭数据库连接
        msgbox("取消事务")  
    Else  
        db.CommitTransaction(tran, True)  '提交事务,同时关闭数据库连接
        msgbox("执行成功")  
    End If  
End If  
Catch ex As Exception  

 回到顶部
帅哥哟,离线,有人找我吗?
lin98
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/8/16 11:46:00 [只看该作者]

问题1:if res > 0 then是事务成功意思?If res = 0 Then是事务失败的意思?
问题2:一个按键单击事件,有多个事务,狐表的操作代码(导入,复制,查询)事件,是否可以同放一个按键里?其程序运行先后如何处理?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/8/16 12:47:00 [只看该作者]

1、帮助有说明,从来没有看帮助的习惯的吗!res表示ExecuteNonQuery执行后影响的行数,比如插入10行,res=10,=0表示没有插入任何行,后面的代码也就没有执行的必要了

2、理论任何代码都可以放到一起

代码正常按书写的先后顺序执行

导入代码1
复制代码2
查询代码3

 回到顶部