Foxtable(狐表)用户栏目专家坐堂 → [分享] 事务处理(20140305)


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

主题:[分享] 事务处理(20140305)

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


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
[分享] 事务处理(20140305)  发帖心情 Post By:2013/12/28 13:09:00 [只看该作者]

 看见论坛上有人在做事务处理,

 

  俺也去百度了一点相关知识

 

下面是俺的初步成果,(家里没装MSSQL,所以只测试了Access)

 

 

 
图片点击可在新窗口打开查看此主题相关图片如下:jdfw.gif
图片点击可在新窗口打开查看

 

 事务处理 (网上摘抄)

事务是 一组组合成逻辑工作单元的数据库操作,在系统执行过程中可能会出错,但事务将控制和维护每个数据库的一致性和完整性。事务处理的主要特征是,任务要么全部 完成,要么都不完成。在写入一些记录时,要么写入所有记录,要么什么都不写入。如果在写入一个记录时出现了一个失败,那么在事务处理中已写入的其他数据就 会回滚。事务可能由很多单个任务构成。

简单事 务的一个常见例子:把钱从A账户转到B账户,这涉及两项任务,即从A账户把钱取出来;把钱存入B账户。两项任务要么同时成功,要么一起失败,给予回滚,以 便保持账户的状态和原来相同。否则,在执行某一个操作的时候可能会因为停电、网络中断等原因而出现故障,所以有可能更新了一个表中的行,但没有更新相关表 中的行。如果数据库支持事务,则可以将数据库操作组成一个事务,以防止因这些事件而使数据库出现不一致。

 

 

 

 

写一个函数放在这里,如果有问题,告诉我改。

 

 

 

 

 

 

      '要执行的SQL语句集合,每个集合项都是针对同一张表的同一种操作拼接语句,不要操过1000次拼接
Dim SqlList As List(of String) = Args(0)

Dim cn1 As Connection = Connections("shiwu")   '获取数据库连接,数据源名称按实际修改
Dim cn As New System.Data.OleDb.OleDbConnection(cn1.ConnectionString)
Dim cmd As new System.Data.OleDb.OleDbCommand
cn.Open()
cmd.Connection = cn
Dim j As Integer = SqlList.Count
try
    cmd.Transaction = cn.BeginTransaction()   '开始事务
    For Each sql As String In SqlList
        cmd.CommandText = sql
        cmd.ExecuteNonQuery()
    Next
    cmd.Transaction.Commit()  '提交事务
    cmd.Dispose()    '释放
    cn.Close()       '关闭连接
    Return 2   
Catch ex As Exception
    cmd.Transaction.Rollback()  '回滚事务
    msgbox("操作被取消!")      '返回错误信息
    cmd.Dispose()    '释放
    cn.Close()       '关闭连接
    Return 1      ‘返回值可以用于后续操作
End Try

 

 

函数操作示例,具体语句自己修改

Dim str As String
For i As Integer = 1 To 1000
    str += "INSERT INTO T_A (A)values('HH" & i & "');"      ’注意,拼接应该是对同一张表的同一种操作。
Next

Dim SQLLIST As NEW List(OF String)
SQLLIST.Add(str)
str = "insert into T_B values('BB')"   ‘模拟错误,是个重复值
SQLLIST.Add(str)
Functions.Execute("数据处理_事务处理",SQLLIST)    

 

 

 

 

   

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:事务处理.zip

 

20140305:

   1)使用OleDbCommandBuilder 的方法

   2)重写了事务函数

   3)弟兄们,有问题别忘了告诉我一声。

 20140307:

漏了一个重要提示:上下两种方式是不同的,各有特点。

1、如果你要自行合成SQL语句,就使用第一种方式,特点是效率高,但合成SQL语句麻烦。

2、第二种方式简单,但效率低,特别是大数据量更新的时候。但他适合狐表现有的操作方式。

       比如项目窗口中有一张主表和子表,主表删除时同时删除子表中的相应数据,点击保存时,要么同时成功,要么都失败。

      这样,就可以将大量的逻辑关系写在项目中就可以了。

 

 

 

    

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:事务处理.zip

 

[此贴子已经被作者于2015/10/4 11:15:27编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/12/28 14:04:00 [只看该作者]

谢谢分享

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/12/28 14:07:00 [只看该作者]

狐表没有事务处理,谁做都该感谢。

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/12/28 14:16:00 [只看该作者]

看看

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/12/28 14:50:00 [只看该作者]

谢楼主分享

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


加好友 发短信
等级:小狐 帖子:341 积分:3412 威望:0 精华:0 注册:2013/5/17 10:55:00
  发帖心情 Post By:2013/12/28 15:03:00 [只看该作者]

多谢分享

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


加好友 发短信
等级:六尾狐 帖子:1433 积分:10763 威望:0 精华:0 注册:2013/3/29 10:23:00
  发帖心情 Post By:2013/12/28 22:58:00 [只看该作者]

瞧瞧

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


加好友 发短信
等级:小狐 帖子:360 积分:2794 威望:0 精华:0 注册:2010/4/30 18:38:00
  发帖心情 Post By:2013/12/28 23:14:00 [只看该作者]

谢谢分享

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


加好友 发短信
等级:幼狐 帖子:161 积分:1681 威望:0 精华:0 注册:2013/2/7 9:40:00
  发帖心情 Post By:2013/12/29 1:38:00 [只看该作者]


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


加好友 发短信
等级:四尾狐 帖子:880 积分:9017 威望:0 精华:3 注册:2012/4/22 18:06:00
  发帖心情 Post By:2013/12/29 8:35:00 [只看该作者]

顶逛逛

 回到顶部
总数 145 1 2 3 4 5 6 7 8 9 10 下一页 ..15