首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

100分请高手查错解决方案

2011-12-30 
100分请高手查错我正学习.net技术,第一次完成了一个练手网站的制成。网站运行刚开始还好,但如果运行一段时

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,也是完全可以的。反而不应该频繁打开数据库连接。

热点排行