您的位置:首页 > 其它

个人重构版机房收费系统事务的使用

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层的代码使用事务的情况(学生注册)界面如下:




我自己设计的数据库中对于学生注册,我建立了两个表: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


这样的话就能够保证两个数据表同时添加数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: