下面是个很简单的删除操作的代码,我加了异常处理,如果此时数据库产生了键约束异常(也就是我想删除一个管理员,可这管理员已经操作过数据,不能删除掉,那么会产生数据库异常)那么我想会弹出我编写的对话框提示:删除失败,可是为什么没弹出对话框,而是弹出一个页面出来提示键约束冲突!好像弹出这页面的优先级比弹出对话框高,我想弹出对话框提示键约束冲突,而不是页面。这样给人的感觉界面不友好,好像系统崩溃了,谁有好的主意????? 
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
        string deletemanagerid = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
        SqlDataSource1.DeleteCommand = "delete from tb_Manager where ManagerID='" + deletemanagerid + "'"; 
        SqlConnection con = DataBase.myCon(); 
        SqlTransaction sqltrans = con.BeginTransaction(); 
        try 
        { 
            
            SqlCommand mycmd = new SqlCommand("delete from tb_Manager where ManagerID='" + deletemanagerid + "'", con); 
            mycmd.Transaction = sqltrans; 
            mycmd.ExecuteNonQuery(); 
            sqltrans.Commit(); 
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "", " <script language='javascript' defer>alert('" + "提示:删除成功!" + "'); </script>"); 
        } 
        catch 
        { 
            sqltrans.Rollback();     
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "", " <script language='javascript' defer>alert('" + "提示:删除失败!" + "'); </script>"); 
        } 
        finally 
        { 
            con.Close(); 
        }     }

解决方案 »

  1.   

    把删除的操作写一个函数,自己抛出异常,
    在GridView1_RowDeleting事件里try,就可以捕获了。
      

  2.   

    那种页面感觉系统好像崩溃了,我只是想让他弹出对话框,而不是这种页面,
    刚才楼上说在在GridView1_RowDeleting事件里try捕获,在哪事件里去执行GridView1_RowDeleting事件呢
      

  3.   

    catch改为catch(Exception ee)
    {
          sqltrans.Rollback();     
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "", " <script language='javascript' defer>alert('" + "提示:删除失败!" + "'); </script>"); }试试也有可能是sqltrans.Rollback(); 发生了错误,这个时候就从catch中再抛出了错误。还有就是你可以单步调试,这样的话,看看catch中的语句是否执行。
      

  4.   

    看楼主的意思,好像异常没有被捕获到,你调试的时候,下面这段代码执行了吗?
            catch
            {
                sqltrans.Rollback();   
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "", " <script language='javascript' defer>alert('" + "提示:删除失败!" + "'); </script>");
            } 
      

  5.   

     protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string message = "";
            string deletemanagerid = GridView1.DataKeys[e.RowIndex].Value.ToString();
            SqlDataSource1.DeleteCommand = "delete from tb_Manager where ManagerID='" + deletemanagerid + "'";
            SqlConnection con = DataBase.myCon();
            SqlTransaction sqltrans = con.BeginTransaction();
            try
            {            SqlCommand mycmd = new SqlCommand("delete from tb_Manager where ManagerID='" + deletemanagerid + "'", con);
                mycmd.Transaction = sqltrans;
                int num = mycmd.ExecuteNonQuery();
                if (num > 0)
                    message = "提示:删除成功!";
                else
                    message = "提示:删除失败!";
                sqltrans.Commit();
            }
            catch
            {
                message = "提示:删除失败!";
                sqltrans.Rollback(); 
            }
            finally
            {
                con.Close();
            }
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", " <script type='text/javascript'>alert('" +message+ "'); </script>");    }
      

  6.   

    那我也试过,已单步执行,catch中语句全部执行,但不会显示,我知道会弹出键冲突错误,但我以为会弹出删除失败,但不会,他会率先弹出键冲突页面,这是个很不友好的页面,感觉系统崩溃了,我只是想弹出对话框,
      

  7.   

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
        { 
            string str="":
            string deletemanagerid = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
            SqlDataSource1.DeleteCommand = "delete from tb_Manager where ManagerID='" + deletemanagerid + "'"; 
            SqlConnection con = DataBase.myCon(); 
            SqlTransaction sqltrans = con.BeginTransaction(); 
            try 
            { 
                
                SqlCommand mycmd = new SqlCommand("delete from tb_Manager where ManagerID='" + deletemanagerid + "'", con); 
                mycmd.Transaction = sqltrans; 
                mycmd.ExecuteNonQuery(); 
                sqltrans.Commit(); 
                str="删除成功! "
            } 
            catch (SqlException ex)
            {
            }
           catch (Exception exception)
            { 
                sqltrans.Rollback(); 
                 str="删除失败!"; 
            } 
            finally 
            { 
                con.Close(); 
            } 
           Page.ClientScript.RegisterStartupScript(Page.GetType(), "", " <script language='javascript' defer>alert('" + str + "'); </script>"); 
        } 
    或设置
    设置错误转向页面
      

  8.   

    楼上的这个代码产生同样的错误,单步执行到catch中,就是不执行,率先弹出键冲突页面页面
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
        { 
            string message = ""; 
            string deletemanagerid = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
            SqlDataSource1.DeleteCommand = "delete from tb_Manager where ManagerID='" + deletemanagerid + "'"; 
            SqlConnection con = DataBase.myCon(); 
            SqlTransaction sqltrans = con.BeginTransaction(); 
            try 
            {             SqlCommand mycmd = new SqlCommand("delete from tb_Manager where ManagerID='" + deletemanagerid + "'", con); 
                mycmd.Transaction = sqltrans; 
                int num = mycmd.ExecuteNonQuery(); 
                if (num > 0) 
                    message = "提示:删除成功!"; 
                else 
                    message = "提示:删除失败!"; 
                sqltrans.Commit(); 
            } 
            catch 
            { 
                message = "提示:删除失败!"; 
                sqltrans.Rollback(); 
            } 
            finally 
            { 
                con.Close(); 
            } 
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", " <script type='text/javascript'>alert('" +message+ "'); </script>");     }