机房收费系统个人版-----触发器
2013-07-01 21:24
162 查看
1、触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动的,而是由事务触发的;它也是由T_SQL语句组成,可以完成存储过程能完成的功能。
2、个人理解:触发器,只要满足某特定条件(insert,delete,update),一触即发。
3、作用:常用于加强数据的完整性约束和业务规则等。
4、触发器与存储过程的不同在于:
5、触发器的优点:
触发器包含复杂的处理逻辑,能够实现复杂的完整性约束。主要有如下优点
触发器自动执行。
触发器能够对数据库中的相关表实现级联更改。触发器基于一个表,但可以实现多表操作,实现相关表的级联操作。
触发器可以实现比CHECK约束更为复杂的数据完整性约束。
触发器可以评估数据修改前后的表的状态,并根据其差异采取对策。
一个表中可以同时存在三个不同操作的触发器(insert、update、delete),对于同一个修改语句可以有多个不同的相应对策。
6、慎用触发器器
触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作……
同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
7、触发器在机房收费系统个人版中的应用
机房收费系统中的退卡操作:它需要删除T_Student表(注册)中的某条记录,同时把删除记录的卡号,退卡金额,日期,时间插入到T_Cancel表(退卡记录)中。
D层代码:
数据库中的触发器:myTrigger
补充:在数据库中获取日期和时间,参数的不懂,有多种表现形式。
2、个人理解:触发器,只要满足某特定条件(insert,delete,update),一触即发。
3、作用:常用于加强数据的完整性约束和业务规则等。
4、触发器与存储过程的不同在于:
5、触发器的优点:
触发器包含复杂的处理逻辑,能够实现复杂的完整性约束。主要有如下优点
触发器自动执行。
触发器能够对数据库中的相关表实现级联更改。触发器基于一个表,但可以实现多表操作,实现相关表的级联操作。
触发器可以实现比CHECK约束更为复杂的数据完整性约束。
触发器可以评估数据修改前后的表的状态,并根据其差异采取对策。
一个表中可以同时存在三个不同操作的触发器(insert、update、delete),对于同一个修改语句可以有多个不同的相应对策。
6、慎用触发器器
触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作……
同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
7、触发器在机房收费系统个人版中的应用
机房收费系统中的退卡操作:它需要删除T_Student表(注册)中的某条记录,同时把删除记录的卡号,退卡金额,日期,时间插入到T_Cancel表(退卡记录)中。
D层代码:
'注销卡号及写入退卡记录表中(在数据库设置触发器,实现了多表操作,要么成功,要么失败!) Public Function CancelCard(ByVal enStudent As Entity.StudentEntity) As Entity.StudentEntity Implements IDAL.StudetInfo.CancelCard Dim strSql As String = "select * from T_Student where cardNo='" & enStudent.CardNo & "'" Dim cmd As SqlCommand Dim myDA As SqlDataAdapter Dim myDT As New DataTable Dim strSql1 As String = "delete from T_Student where cardNo='" & enStudent.CardNo & "'" Dim cmd1 As SqlCommand cmd = New SqlCommand(strSql, conn) myDA = New SqlDataAdapter(cmd) conn.Open() '先查询,把要删除的记录找到,去除 myDA.Fill(myDT) If myDT.Rows.Count > 0 Then enStudent.Money = myDT.Rows(0).Item(8) '执行删除操作时,激活触发器,然后执行相应的操作。 cmd1 = New SqlCommand(strSql1, conn) If cmd1.ExecuteNonQuery > 0 Then Return enStudent Else Throw New Exception("操作失败!") End If Else Throw New Exception("此卡号不存在!") End If conn.Close() End Function
数据库中的触发器:myTrigger
USE [Charge3] GO create trigger [dbo].[myTrigger] on [dbo].[T_Student] for delete as --声明变量 declare @cardNo varchar(8) declare @CancelCash Varchar(50) declare @date Varchar(10) declare @time Varchar(8) --给变量赋值 select @cardNo =cardNo from deleted select @CancelCash = Money from deleted set @date=CONVERT(varchar(10),getdate(),111) --获取日期 set @time=CONVERT (varchar(8),getdate(),108)--获取时间 if @@ROWCOUNT >0 --受影响的行数 begin Insert into T_CancelCard(cardNo,cancelCash ,date ,time )values (@cardNo ,@CancelCash ,@date ,@time ) rollback Tran --回滚事务 end
补充:在数据库中获取日期和时间,参数的不懂,有多种表现形式。
相关文章推荐
- VS制作报表(机房收费系统个人版日结账单)
- VB.NET机房收费系统个人版----知识新充实
- 机房收费系统之触发器
- 机房收费系统之存储过程和触发器
- 机房收费系统个人版——DataGridView控件怎么用?
- 重构个人版机房收费系统——sqlhelper
- 【机房收费系统】——触发器
- 机房收费系统之触发器的使用
- 机房收费系统之触发器
- 【机房收费个人版】触发器与存储过程
- 机房收费系统个人版——DataGridView控件怎么用?
- 重构个人版机房收费系统——模板模式
- 机房收费系统个人版---存储过程+事务回滚
- 机房收费系统二次重构个人版总结
- 重构个人版机房收费系统——视图
- 机房收费系统重构个人版之原型图
- 重构个人版机房收费系统—存储过程
- 【机房收费系统个人版】三层登陆
- 小结:VB.NET机房收费系统个人版
- VB.Net机房收费系统个人版总结