读书人

100分请高手查错解决方案

发布时间: 2011-12-30 23:30:45 作者: rapoo

100分请高手查错
我正学习.net技术,第一次完成了一个练手网站的制成。网站运行刚开始还好,但如果运行一段时间以后,随着加入的内容的增加,就会出现问题。
问题提示如下:

“/”应用程序中的服务器错误。
--------------------------------------------

未指定的错误
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[OleDbException (0x80004005): 未指定的错误]
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1054785
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +53
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +27
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +47
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105
System.Data.OleDb.OleDbConnection.Open() +37
XuXuBooks.DataBase.Reader(String strSql) +256
index.Page_Load(Object sender, EventArgs e) +46
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




--------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42

我怀疑是我的自写类有问题,但不肯定,请帮我检查一下,是否是这个地方的问题,如果是,请问如何改

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb ;

/// <summary>
/// DataBase 的摘要说明
/// </summary>

namespace XuXuBooks
{
public class DataBase
{
public int sqlNonQuery(string strSql)
{
Page page = new Page();
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source= " + page.Server.MapPath( "~ ") + ConfigurationSettings.AppSettings[ "myConnection "] + ";Jet OLEDB:Database Password= " + ConfigurationSettings.AppSettings[ "pwd "] + "; ";


OleDbConnection Connection = new OleDbConnection(strConn );
OleDbCommand Command = new OleDbCommand(strSql, Connection);
Connection.Open();
int result = Command.ExecuteNonQuery();
Connection.Close();
return result;
}

public int sqlScalar(string strSql)
{
Page page = new Page();
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source= " + page.Server.MapPath( "~ ") + ConfigurationSettings.AppSettings[ "myConnection "] + ";Jet OLEDB:Database Password= " + ConfigurationSettings.AppSettings[ "pwd "] + "; ";
OleDbConnection Connection = new OleDbConnection(strConn);
OleDbCommand Command = new OleDbCommand(strSql, Connection);
Connection.Open();
int result;
try
{
result = (int)Command.ExecuteScalar();
}
catch
{
result = -1;
}
Connection.Close();
return result;
}

public void insertImg(string strSql,byte[] img)
{
Page page = new Page();


string strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source= " + page.Server.MapPath( "~ ") + ConfigurationSettings.AppSettings[ "myConnection "] + ";Jet OLEDB:Database Password= " + ConfigurationSettings.AppSettings[ "pwd "] + "; ";
OleDbConnection Connection = new OleDbConnection(strConn);
OleDbCommand Command = new OleDbCommand(strSql, Connection);

Command.Parameters.Add( "imgData ", OleDbType.Binary);
Command.Parameters[ "imgData "].Value = img;

Connection.Open();
Command.ExecuteNonQuery();
Connection.Close();
}

public OleDbDataReader Reader(string strSql)
{
Page page = new Page();
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source= " + page.Server.MapPath( "~ ") + ConfigurationSettings.AppSettings[ "myConnection "] + ";Jet OLEDB:Database Password= " + ConfigurationSettings.AppSettings[ "pwd "] + "; ";
OleDbConnection Connection = new OleDbConnection(strConn);
OleDbCommand Command = new OleDbCommand(strSql, Connection);
Connection.Open();
OleDbDataReader temp = Command.ExecuteReader(CommandBehavior.CloseConnection);

return temp;
}

public DataSet myDataSet(string strSql)
{
Page page = new Page();
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source= " + page.Server.MapPath( "~ ") + ConfigurationSettings.AppSettings[ "myConnection "] + ";Jet OLEDB:Database Password= " + ConfigurationSettings.AppSettings[ "pwd "] + "; ";


OleDbDataAdapter da=new OleDbDataAdapter(strSql,strConn);
DataSet tempDataSet=new DataSet();
da.Fill(tempDataSet);
return tempDataSet;
}
}
}

页面中我都是生成一个sql语句,通过参数形式来完成数据库的增加删除等操作的。

万分感激

[解决办法]
数据库连接打开后要及时关闭连接

public OleDbDataReader Reader(string strSql)

这个方法的连接使用后是否及时关闭连接了
[解决办法]
public OleDbDataReader Reader(string strSql)
这个方法在跨越层的时候最好别用,因为你不能保证连接及时关闭
[解决办法]
这个需要你自己进一步调试才知道。你贴的问题只是最外层的异常,而完整异常应该包括递归的深度异常(InnerException属性返回的)。

public OleDbDataReader Reader(string strSql)
{
try{
Page page = new Page();
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source= " + page.Server.MapPath( "~ ") + ConfigurationSettings.AppSettings[ "myConnection "] + ";Jet OLEDB:Database Password= " + ConfigurationSettings.AppSettings[ "pwd "] + "; ";
OleDbConnection Connection = new OleDbConnection(strConn);
OleDbCommand Command = new OleDbCommand(strSql, Connection);
Connection.Open();
OleDbDataReader temp = Command.ExecuteReader(CommandBehavior.CloseConnection);

return temp;
}
catch(OleDbException ex)
{
throw ex.InnerException;
}
}


Jet数据库可以不像sql server的数据连接那样使用缓冲池,因为它的 OleDbDataReader 并不独占数据库连接。你可以试一试(我承认我没有试过),你同时为从同一个连接Jet数据库的OleDBConnection创建两个OleDbDataReader,分别读取它们,并不异常。因此,对Jet数据库而言,其实你让整个网站共享一个(唯一的一个) OleDbConnection,也是完全可以的。反而不应该频繁打开数据库连接。

读书人网 >asp.net

热点推荐