数据库连接层中我把SqlException都抛出来了业务层也把SqlException抛了出来
 try
            {
                conn = DB.GetConn();
                SqlCommand cmd = new SqlCommand(strSql, conn);
                SqlDataReader sdr = cmd.ExecuteReader();
                if (sdr.Read())
                    bResult = true;
            }
            catch(SqlException e)
            {
                throw e;
            }
            finally
            {
                DB.CloseConn();
            }UI层代码                    //验证登陆名
                    if (StaffEntity.IsExist(loginName))
                    {
                        //验证登陆名与密码
                        if (StaffEntity.IsCorrect(loginName, pwd))
                        {
                            Session["User"] = StaffEntity.GetStaffID(loginName);
                            this.lblfail.Text = "";
                            Response.Redirect("Index.aspx");
                        }
                        else
                            this.lblfail.Text = "密码错误!";
                    }
                    else
                        this.lblfail.Text = "登录名错误!";现在我把数据库服务关掉了,如果UI层不进行try catch,数据连接层就会出错、崩溃掉
请问UI层的每用到业务层的代码都要try catch吗? 有没有什么方法能让它出错了就跳转到ErrPage页面呢?

解决方案 »

  1.   

    <customErrors mode="RemoteOnly" defaultRedirect="~/error.htm"/>貌似网上对try catch的争论很多 LZ可取找一二看看
      

  2.   

    这是放在web.config中的吗? 用了这个代码不用try catch就会自动跳转?
      

  3.   

    其实在UI层一般可以不try{}catch{}的
    一般情况下访问数据库绝对会try{}catch{}抛出数据库连接异常
      

  4.   

    现在我的UI层没有try catch
    我把数据库服务关掉后,登录页面,在数据库层就报了异常了 
      

  5.   

    很多地方可以捕获异常。在配置文件中设置,在global.ascx文件的Application_Error事件处理中,或者在页面(以及ascx)文件的Page_Error事件处理中
      

  6.   

    假设你使用了asp.net ajax,那么可以看msdn上的例子:http://msdn.microsoft.com/zh-cn/library/system.web.ui.scriptmanager.asyncpostbackerror.aspx你可以看到,可以自己根据e.Exception的类型等等,编辑自己的异常提示信息,然后推送给客户端弹出提示窗口。
      

  7.   

    LZ在catch里面,可以捕获到异常,在这里写页面跳转到错误页Response.Write("Error.aspx");