个人重构版机房收费系统事务的使用
2013-07-24 17:50
323 查看
虽然不是第一次做机房收费系统,对于机房收费系统需求也都了解,但是如果要做出让自己满意的机房收费系统就够费脑筋啊。一个事务弄的我整了好长时间。
事务(Transaction):将彼此相关的多项操作合并成一个逻辑单元,以便于确保这些操作要么全部执行,要么全不执行。
在ADO.NET使用事务时,sqlconnection和
oledbconnection对象都包含一个beginTransaction方法,他能够返回sqlTransaction或者oledbTransaction。事务对象拥有commit和rollback方法来管理应用程序中的事务。
执行事务的步骤:(这里以sql数据库为准)
(1)调用连接对象的beginTransaction方法,将返回值赋给一个sqlTransaction类型的变量
例如:dim myTrans as (new) SqlTransaction
Dim conn as new sqlconnection
myTrans=conn.beginTransaction()
(2)为要在事务中执行的所有对象设置Transaction属性来引用事务对象。
Dim cmd as sqlcommand
Cmd.Transaction=myTrans
(3)执行必要的命令对象。
(4)如果命令完成,则调用事务对象的commit方法。如果发生任何问题,则调用rollback会滚到初始条件
下面是我对机房收费系统DLL层的代码使用事务的情况(学生注册)界面如下:
![](http://img.blog.csdn.net/20130724173301171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3h1aGViZWliZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
我自己设计的数据库中对于学生注册,我建立了两个表:stuInfo 和
cardInfo 这两个表,所以我是用事务对两个表添加学生信息(能够添加就同时添加,不能添加就都不要添加,这就是我使用事务的本意。)
具体D层代码如下:
这样的话就能够保证两个数据表同时添加数据。
事务(Transaction):将彼此相关的多项操作合并成一个逻辑单元,以便于确保这些操作要么全部执行,要么全不执行。
在ADO.NET使用事务时,sqlconnection和
oledbconnection对象都包含一个beginTransaction方法,他能够返回sqlTransaction或者oledbTransaction。事务对象拥有commit和rollback方法来管理应用程序中的事务。
执行事务的步骤:(这里以sql数据库为准)
(1)调用连接对象的beginTransaction方法,将返回值赋给一个sqlTransaction类型的变量
例如:dim myTrans as (new) SqlTransaction
Dim conn as new sqlconnection
myTrans=conn.beginTransaction()
(2)为要在事务中执行的所有对象设置Transaction属性来引用事务对象。
Dim cmd as sqlcommand
Cmd.Transaction=myTrans
(3)执行必要的命令对象。
(4)如果命令完成,则调用事务对象的commit方法。如果发生任何问题,则调用rollback会滚到初始条件
下面是我对机房收费系统DLL层的代码使用事务的情况(学生注册)界面如下:
我自己设计的数据库中对于学生注册,我建立了两个表:stuInfo 和
cardInfo 这两个表,所以我是用事务对两个表添加学生信息(能够添加就同时添加,不能添加就都不要添加,这就是我使用事务的本意。)
具体D层代码如下:
Imports System.Data.SqlClient Public Class StuRegistDAL : Implements IDAL.IRegister '注册 Public Function Register_IDAL(ByVal cardInfo As Entity.CardInfoEntity, ByVal stuInfo As Entity.StuInfoEntity) As Boolean Implements IDAL.IRegister.Register_IDAL '定义字符串 Dim str As String = "Data Source=192.168.24.76;Initial Catalog=Charge_System;uid=sa;Pwd=123456" '实例化conn并使用构造函数初始化conn Dim conn As New SqlClient.SqlConnection(str) '定义 事务类型的变量 Dim myTrans As SqlTransaction '实例化 Sqlcommand 类 Dim cmd As New SqlCommand '注册 Try '打开数据库 conn.Open() '调用sqltransaction的beginTransaction方法来开始一个本地事务,并将返回的sqlTransaction对象赋给Tstrans myTrans = conn.BeginTransaction '将conn对象和cmd相关联 cmd.Connection = conn '将myTrans对象和 cmd相关联 cmd.Transaction = myTrans Dim sql As String = "Insert Into T_CardInfo ( cardno,cash,registerdate,registertime,ischeck,userid ) " & _ " values ( '" & cardInfo.cardno & "','" & cardInfo.cash & "','" & Date.Today & "', '" & TimeOfDay & "','" & cardInfo.ischeck & "','" & cardInfo.userid & "') " '将cmd对象和Tstrans对象相关联 cmd.CommandText = sql cmd.ExecuteNonQuery() '给学生表添加学生表的信息 sql = " insert into T_StuInfo (stuno,cardno,stuname,sex,stuclass,grade,department ) " & _ "values ( '" & stuInfo.stuno & "','" & stuInfo.cardno & "','" & stuInfo.stuname & "','" & stuInfo.sex & "','" & stuInfo.stuclass & "','" & stuInfo.grade & "','" & stuInfo.department & "' )" cmd.CommandText = sql cmd.ExecuteNonQuery() myTrans.Commit() Return True Catch ex As Exception '事务对象置空 myTrans = Nothing '让事务回滚 myTrans.Rollback() '返回 false 其他层,根据该返回值 判断注册的与否 (如果false 当然是没有注册成功) Return False End Try End Function End Class
这样的话就能够保证两个数据表同时添加数据。
相关文章推荐
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
- 个人重构机房收费系统SqlHelper的使用
- 重构机房VB.NET<机房收费系统个人重构版>你都学会了什么(之一)
- VB.NET<机房收费系统个人重构版>你都学会了什么(之三)
- 个人重构机房收费系统报表使用之最简单的显示连接
- VB.NET<机房收费系统个人重构版>你都学会了什么(之四)
- VB.NET<机房收费系统个人重构版>你都学会了什么(之二)
- VB.NET<机房收费系统个人重构版>你都学会了什么(之六)
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
- VB.NET<机房收费系统个人重构版>你都学会了什么(之一)
- 机房收费系统中-枚举使用
- 个人重构机房收费系统——报表制作
- 机房收费系统完美设计——事务处理vs三层架构2
- 机房收费系统个人重构版:暮然回首,灯火阑珊
- 机房收费系统个人版重构——报表制作
- 机房收费系统中-枚举使用
- 数据库重建----个人版机房收费系统重构
- 机房收费系统个人重构——画图疑惑多多
- 个人版机房收费系统总结
- 机房收费系统个人重构版1、——类头注释模板