原创:基于VB的ASP.NET2.0的事务及错误处理

Posted on 2008-03-13 12:05  蓝箭GZ  阅读(341)  评论(0编辑  收藏  举报


 

有数据库school中的两个表student,course,结构如下:

student

主键:stu_id

stu_name

外键:course_id

course

主键:course_id

        course_name

问题:

当关联表带外键约束时,册除父表项时,由于其关联子表尚不为空,就会出错:

DELETE 语句与 COLUMN REFERENCE 约束 'FK student_ course ' 冲突。该冲突发生于数据库 'school',表 'student', column 'course_id'。语句已终止。

处理:

使用两个GridView,勾选“使用删除”选项,以及它的数据源的高级选项中勾先“生成INSERTUPDATEDELETE语句”

如果只是这样设置,删除时就会出上面的错误提示,如何不弹出这个系统提示,而弹出自己设置的提示信息,以下是一个可行的办法:

1.数据源控件,提供了事务和错误的处理方法,事务方法加入如下代码:

加入命名空间:imports System.Data.Common

2.在数据源控件的deleting事件中加入:

   '这是事务的定义

        Dim cmd As DbCommand = e.Command

        Dim conn As DBconnection = cmd.connection

        conn.Open()

        Dim tran As DbTransaction = conn.BeginTransaction()

        cmd.Transaction = tran

3.在在数据源控件的deleted事件中加入:

'这是事务的处理

        If (e.Exception Is Nothing) Then

            e.Command.Transaction.Commit()

           ‘ MsgBox("删除成功!")
                Response.Write(" <script> alert( '删除成功!'); </script> ")
            

        Else

            e.Command.Transaction.Rollback()

            e.ExceptionHandled = True   这行要加,表示错误已处理,否则错误会继续传下去,还是会出现上面的错误提示

           Response.Write(" <script> alert( '下级子菜单未空,不能删除主菜单!'); </script> ")
         ‘MsgBox("
下级子菜单未空,不能删除主菜单!")   '这个在VS的调试时(服务器端)可以弹出提示窗,正常使用时出错!

        End If

参考:

1. e.Exception --表示增加时发生的异常对象,如果在调用的目标对象上发生异常,查看InnerException对象以取得更多信息。

2. e.ExceptionHandled --表示是否将异常标记为已处理,如果设为true,异常不会传到后面的事件中去。

3. e.ReturnValue --表示你在object data source上设置的InsertMethod返回的值,可以通过此值检查是否成功。

补充:

4. e.ExceptionHandled --表示是否将异常标记为已处理,如果设为true,异常不会传到后面的Page.Error事件中去。否则如果定义了Page.Error事件,先执行Page.Error事件,如果Page.Error没有执行Server.ClearError()方法,异常再传入Application_Error事件中去.未定义Page.Error事件处理程序时,直接传入Application_Error事件中。
5. e.KeepInEditMode --
是否保持Edit模式中,通常如果出错,我们会显示一个错误信息,保持在Edit模式方便用户修改。


Copyright © 2024 蓝箭GZ
Powered by .NET 9.0 on Kubernetes