看见论坛上有人在做事务处理,
俺也去百度了一点相关知识
下面是俺的初步成果,(家里没装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)
20140305:
1)使用OleDbCommandBuilder 的方法
2)重写了事务函数
3)弟兄们,有问题别忘了告诉我一声。
20140307:
漏了一个重要提示:上下两种方式是不同的,各有特点。
1、如果你要自行合成SQL语句,就使用第一种方式,特点是效率高,但合成SQL语句麻烦。
2、第二种方式简单,但效率低,特别是大数据量更新的时候。但他适合狐表现有的操作方式。
比如项目窗口中有一张主表和子表,主表删除时同时删除子表中的相应数据,点击保存时,要么同时成功,要么都失败。
这样,就可以将大量的逻辑关系写在项目中就可以了。
[此贴子已经被作者于2015/10/4 11:15:27编辑过]