string mdbpath = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath("#ErrData.mdb");
        System.Data.OleDb.OleDbConnection mdbconn = new System.Data.OleDb.OleDbConnection(mdbpath);        try
        {
            mdbconn.Open();
        }
        catch(Exception ex)
        {
            Response.Redirect("2009/default.aspx");
        } 
        string ip = Request.UserHostAddress;
        string errurl = Request.Url.AbsoluteUri;
        errurl = errurl + Request.Url.PathAndQuery;
        string mdbstr = "insert into errmsgData (errurl,errmsg,ip,errdate) values(@errurl,@errmsg,@ip,@errdate)";
        System.Data.OleDb.OleDbCommand mdbcomm = new System.Data.OleDb.OleDbCommand(mdbstr, mdbconn);
        mdbcomm.Parameters.AddWithValue("@errurl", errurl);
        mdbcomm.Parameters.AddWithValue("@errmsg", e.ToString());
        mdbcomm.Parameters.AddWithValue("@ip", ip);
        mdbcomm.Parameters.AddWithValue("@errdate", DateTime.Now.ToString());
        try
        {
            mdbcomm.ExecuteNonQuery();
        }
        catch
        {
            Response.Redirect("2009/default.aspx");
        }在普通页面上放这段代码,执行没有问题,而把它放到 Global.asax 的Application_Error里边就出错,为什么?

解决方案 »

  1.   

    报什么错误阿?把Exception catch起来打个log.
      

  2.   

    mdbconn.Open(); 一到这里就出错了
      

  3.   

    Exception ex
    看看ex.Message是什么内容。是否路径问题。出错处理一般通过错误处理类实现
      

  4.   

     void Application_Error(object sender, EventArgs e) 
        {
           
            // 在出现未处理的错误时运行的代码
            string mdbpath = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath("#ErrData.mdb");
            System.Data.OleDb.OleDbConnection mdbconn = new System.Data.OleDb.OleDbConnection(mdbpath);
            
            try
            {
                mdbconn.Open();
            }
            catch(Exception ex)
            {
                Response.Write(ex.Message);
                //Response.Redirect("2009/default.aspx");
            }......
    这段执行不到,为了测试这段程序, sTitle = newsDR["newsType"].ToString(); 我另到这个newsDR为空,于是.tostring()就出错,但就不能打开数据库,网页一直就提示“/KMY”应用程序中的服务器错误。
    --------------------------------------------------------------------------------在没有任何数据时进行无效的读取尝试。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 在没有任何数据时进行无效的读取尝试。源错误: 
    行 30:         newsDR  = newsDb.ReturnParameterDataReader(selectstr, parstr, parval);
    行 31:         newsDR.Read();
    行 32:         pageText = newsDR["newsType"].ToString();
    行 33:         sTitle = newsDR["Title"].ToString();
    行 34:         content = newsDR["content"].ToString();
     源文件: d:\neweb\kmy2009\2009\NewsDetail.aspx.cs    行: 32 堆栈跟踪: 
    [InvalidOperationException: 在没有任何数据时进行无效的读取尝试。]
       System.Data.SqlClient.SqlDataReader.GetValue(Int32 i) +137
       System.Data.SqlClient.SqlDataReader.get_Item(String name) +24
       NewsDetail.Page_Load(Object sender, EventArgs e) in d:\neweb\kmy2009\2009\NewsDetail.aspx.cs:32
       System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
       System.Web.UI.Control.OnLoad(EventArgs e) +99
       System.Web.UI.Control.LoadRecursive() +47
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061 
    --------------------------------------------------------------------------------
    而并没有执行我想要的代码
      

  5.   

    确定conn.Open打开了吗?没有的话,你想Response.Redirect估计也不行的,因为你在Application_OnError里做的,放在Page的OnError里试试看。
      

  6.   

    // 在出现未处理的错误时运行的代码
            string mdbpath = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath("~/App_Data/#ErrData.mdb");
            Exception errmsg = Server.GetLastError().GetBaseException();
            //Server.ClearError();
            System.Data.OleDb.OleDbConnection mdbconn = new System.Data.OleDb.OleDbConnection(mdbpath);
            
            try
            {
                mdbconn.Open();
            }
            catch(Exception ex)
            {
                Response.Write(ex.Message);
            }
            string ip = Request.UserHostAddress;
            string errurl = Request.Url.AbsoluteUri;
            string mdbstr = "insert into errmsgData (errurl,errmsg,ip,errdate) values(@errurl,@errmsg,@ip,@errdate)";
            System.Data.OleDb.OleDbCommand mdbcomm = new System.Data.OleDb.OleDbCommand(mdbstr, mdbconn);
            mdbcomm.Parameters.AddWithValue("@errurl", errurl);
            mdbcomm.Parameters.AddWithValue("@errmsg", errmsg);
            mdbcomm.Parameters.AddWithValue("@ip", ip);
            mdbcomm.Parameters.AddWithValue("@errdate", DateTime.Now.ToString());
            try
            {
                mdbcomm.ExecuteNonQuery();
            }
            catch
            {
                Response.Redirect("~/2009/default.aspx");
            }