以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [分享] 事务处理(20140305)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=44338)

--  作者:逛逛
--  发布时间:2013/12/28 13:09:00
--  [分享] 事务处理(20140305)

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

 

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

 

下面是俺的初步成果,(家里没装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
--  发布时间:2013/12/28 14:04:00
--  
谢谢分享
--  作者:lsy
--  发布时间:2013/12/28 14:07:00
--  
狐表没有事务处理,谁做都该感谢。
--  作者:blackzhu
--  发布时间:2013/12/28 14:16:00
--  
看看
--  作者:狐狸爸爸
--  发布时间:2013/12/28 14:50:00
--  
谢楼主分享
--  作者:9602084
--  发布时间:2013/12/28 15:03:00
--  
多谢分享
--  作者:tennis
--  发布时间:2013/12/28 22:58:00
--  
瞧瞧
--  作者:lyq
--  发布时间:2013/12/28 23:14:00
--  
谢谢分享
--  作者:北极狼
--  发布时间:2013/12/29 1:38:00
--  

--  作者:qq121454970
--  发布时间:2013/12/29 8:35:00
--  
顶逛逛