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里边就出错,为什么?
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里边就出错,为什么?
看看ex.Message是什么内容。是否路径问题。出错处理一般通过错误处理类实现
{
// 在出现未处理的错误时运行的代码
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
--------------------------------------------------------------------------------
而并没有执行我想要的代码
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");
}