VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET事务处理

事务由执行的单个命令或一组命令组成。 通过事务可以将多个操作合并为单个工作单元。 如果在事务中的某一点发生故障,则所有更新都可以回滚到其事务前状态。
例如,假设应用程序执行两个任务。 首先使用订单信息更新表。 然后更新包含库存信息的表,将已订购的商品记入借方。 如果任何一项任务失败,则这两个更新将回滚。
事务的作用:
一致性:同时进行的查询和更新彼此不会发生冲突,其它用户不会看到发生了变化但尚未提交的数据;
可恢复性:一旦故障或失败,数据库会自动地完全恢复未完成的事务(Rollback)。
ADO.net事务处理的优缺点:
优点:简单、运行速度快、独立于数据库。
缺点:不能跨多个数据库连接。
注意:事务执行建立在数据库的连接层上,所以需要在事务过程中一直保持数据库连接。
ADO.net事务的执行步骤
1、调用OleDbConnection 对象的BeginTransaction 方法,声明事务开始。
2、将 OleDbTransaction 对象分配给要执行的OleDbCommand的 Transaction 属性。
3、执行所需的命令。
4、调用OleDbTransaction对象的Commit 方法提交事务,或调用 Rollback 方法回滚事务(即事务失败后的全部恢复)。如果在 Commit 或 Rollback 方法执行之前连接关闭或断开,事务将回滚。
实例代码:
来源官网帮助里的源码改编。

Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
            conn.Open()

            Dim cmd As New OleDbCommand()
            cmd.Connection = conn

            '第一步,声明事务开始
            Dim oledbTran As OleDbTransaction '这里不能new.   friend成员
            oledbTran = conn.BeginTransaction() '这句必须在下句前,相当于实例事务对象
            '第二步,在当前事务中登记命令
            cmd.Transaction = oledbTran

            Try
                '第三步,执行两个单独的命令.
                cmd.CommandText = "update [position] set province_name='自定义' where Id = 1"
                cmd.ExecuteNonQuery()
                cmd.CommandText = "INSERT INTO [position](province_name) VALUES('事务处理')"
                cmd.ExecuteNonQuery()

                '第四步,提交事务
                oledbTran.Commit()
                MessageBox.Show("事务提交执行成功!")

            Catch ex As Exception
                ' 如果事务未能提交,则处理异常
                MessageBox.Show(ex.Message)

                Try
                    ' 尝试回滚事务。
                    oledbTran.Rollback()

                Catch exRollback As Exception
                    '如果连接已关闭或已回滚数据。
                    MessageBox.Show(exRollback.Message)
                End Try
            End Try
        End Using

从 这个例子中,可以看到事务是多个SQL语句提交执行(批处理),当如果有一条不成功,则全部恢复(不管以前是否成功)。

猜你喜欢

转载自blog.csdn.net/zyjq52uys/article/details/88554380