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

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

2012-01-14 
异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误刚开始运行时都很正常,每个页面都可以正常

异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误
刚开始运行时都很正常,每个页面都可以正常显示,当在页面间多次浏览,最后浏览More.aspx   时就会发生下面的错误。
大家能否帮忙分析一下原因。我的conn   连接是没有问题的。是不是多个页面里调用了public   OleDbDataReader   Select(string   sqltext)
这个函数,打开了多个conn   而conn   又没有关闭才会出现这样的错误啊?大家能否帮忙分析下原因,并提供一下解决办法呀?

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

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

源错误:  


行   114:OleDbConnection   conn=this.OleDbConn();
行   115:OleDbCommand   cmd=new   OleDbCommand(sqltext,conn);
行   116:conn.Open();       //它提示错误出现在这行
行   117:return   cmd.ExecuteReader();
行   118:
 

源文件:   d:\my   document\gaoxinqi\dbclass\dbconn.cs         行:   116  

堆栈跟踪:  


[OleDbException   (0x80004005):   未指定的错误]
      System.Data.OleDb.OleDbConnection.ProcessResults(Int32   hr)
      System.Data.OleDb.OleDbConnection.InitializeProvider()
      System.Data.OleDb.OleDbConnection.Open()
      DbClass.DbConn.Select(String   sqltext)   in   d:\my   document\gaoxinqi\dbclass\dbconn.cs:116
      LogicRule.Logics.Select(String   sqltext)   in   D:\my   document\GAOXINQI\LogicRule\Logics.cs:38
      WebUI.UsersControls.ucontrol.DataDisplay()   in   d:\my   document\gaoxinqi\webui\userscontrols\ucontrol.ascx.cs:50
      WebUI.UsersControls.ucontrol.Page_Load(Object   sender,   EventArgs   e)   in   d:\my   document\gaoxinqi\webui\userscontrols\ucontrol.ascx.cs:31
      System.Web.UI.Control.OnLoad(EventArgs   e)
      System.Web.UI.Control.LoadRecursive()
      System.Web.UI.Control.LoadRecursive()
      System.Web.UI.Control.LoadRecursive()
      System.Web.UI.Control.LoadRecursive()
      System.Web.UI.Control.LoadRecursive()
      System.Web.UI.Page.ProcessRequestMain()

 





项目包括DbClass   类库,LogicRule   类库,以及WebUI(More.aspx,Show.aspx,文件夹UerControls(ucontrol.ascx))
部分代码省略

<appSettings>
<add   key= "connstr "   value= "provider=microsoft.jet.oledb.4.0;data   source= "> </add>
<add   key= "dbpath "   value= "../DataFile/gaoxinqi.mdb "> </add>
</appSettings>

DbClass(DbConn.cx)
DbConn.cx
                                public   OleDbConnection   OleDbConn()     //构造数据库连接  
{
string   connstr=System.Configuration.ConfigurationSettings.AppSettings[ "connstr "].ToString()+System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings[ "dbpath "].ToString());
return   new   OleDbConnection(connstr);
}
public   OleDbDataReader   Select(string   sqltext)
{
OleDbConnection   conn=this.OleDbConn();
OleDbCommand   cmd=new   OleDbCommand(sqltext,conn);
conn.Open();
return   cmd.ExecuteReader();


}

LogicRule(logics.cx)
logics.cx

public   OleDbDataReader   Select(string   sqltext)


{
return   (new   DbConn()).Select(sqltext);   //(***********)
}


More.aspx

using   System;
using   System.Collections;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Web;
using   System.Web.SessionState;
using   System.Web.UI;
using   System.Web.UI.WebControls;
using   System.Web.UI.HtmlControls;


namespace   WebUI
{
///   <summary>
///   More   的摘要说明。
///   </summary>
public   class   More   :   System.Web.UI.Page
{
protected   System.Web.UI.WebControls.DataList   DataList1;

private   void   Page_Load(object   sender,   System.EventArgs   e)
{
//   在此处放置用户代码以初始化页面
if(!this.IsPostBack)
{
this.DataBinder();
}
}



private   void   DataBinder()
{
string   sqltext= "select   *   from   shop   order   by   uptime   desc ";
this.DataList1.DataSource=(new   LogicRule.Logics()).Select(sqltext);   //(*********)
this.DataList1.DataBind();

}
}
}

More.aspx   html   里的部分代码
<asp:DataList   id= "DataList1 "   runat= "server "   RepeatColumns= "3 ">
<ItemTemplate>
<FONT   face= "宋体 ">
<uc1:ucontrol   id= "Ucontrol1 "   runat= "server "   ShopId= ' <%#   DataBinder.Eval(Container.DataItem, "shopid ")   %> '>
</uc1:ucontrol> </FONT>
</ItemTemplate>
<AlternatingItemTemplate>
<FONT   face= "宋体 ">
<uc1:ucontrol   id= "Ucontrol2 "   runat= "server "   ShopId= ' <%#   DataBinder.Eval(Container.DataItem, "shopid ")   %> '>
</uc1:ucontrol> </FONT>
</AlternatingItemTemplate>
</asp:DataList>


Show.aspx

using   System;
using   System.Collections;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Web;
using   System.Web.SessionState;
using   System.Web.UI;
using   System.Web.UI.WebControls;
using   System.Web.UI.HtmlControls;
using   System.Data.OleDb;
using   WebUI.UsersControls;

namespace   WebUI
{
///   <summary>
///   Show   的摘要说明。
///   </summary>
public   class   Show   :   System.Web.UI.Page
{
protected   System.Web.UI.WebControls.HyperLink   HyperLink1;
protected   System.Web.UI.WebControls.Table   Table2;
private   int   rowNum=4;

private   void   Page_Load(object   sender,   System.EventArgs   e)
{
//   在此处放置用户代码以初始化页面

string   sqltext= "select   top   5   ShopId   from   shop   order   by   Uptime   asc ";
OleDbDataReader   dr=(new   LogicRule.Logics()).Select(sqltext);   //(***********)
int   i=0;
System.Web.UI.WebControls.TableRow   tr=new   TableRow();
while(dr.Read())
{
i=i+1;
System.Web.UI.WebControls.TableCell   tc=new   TableCell();


ucontrol   hpc=(ucontrol)this.LoadControl( "UsersControls/ucontrol.ascx ");
hpc.ShopId=dr.GetString(0);
tc.Controls.Add(hpc);
tr.Controls.Add(tc);
if(i%this.rowNum   ==0)
{
this.Table2.Rows.Add(tr);
tr=new   TableRow();
}
}
if(i%this.rowNum   !=0)
{
this.Table2.Rows.Add(tr);
}
dr.Close();



UserControls(ucontrol.ascx)
ucontrol.ascx

using   System.Data;
using   System.Data.OleDb;
namespace   WebUI.UsersControls

{
using   System;
using   System.Data;
using   System.Drawing;
using   System.Web;
using   System.Web.UI.WebControls;
using   System.Web.UI.HtmlControls;

///   <summary>
///ucontrol   的摘要说明。
///   </summary>
public   class   ucontrol   :   System.Web.UI.UserControl
{
protected   System.Web.UI.WebControls.Label   lname;
protected   System.Web.UI.WebControls.Label   lprice;
protected   System.Web.UI.WebControls.Label   linstruction;
protected   System.Web.UI.WebControls.HyperLink   HyperLink1;
protected   System.Web.UI.WebControls.Button   btnbus;
protected   System.Web.UI.WebControls.Button   btnshow;
protected   System.Web.UI.WebControls.Image   Image1;

private   void   Page_Load(object   sender,   System.EventArgs   e)
{
//   在此处放置用户代码以初始化页面
if(!this.IsPostBack)
{
this.DataDisplay();
}



}

private   string   shopid;
public   string   ShopId
{
set
{
this.shopid=value.ToString();
}
}

private   void   DataDisplay()
{
string   sqltext= "select   *   from   shop   where   shopid= ' "+this.shopid+ " ' ";
OleDbDataReader   dr=(new   LogicRule.Logics()).Select(sqltext);   //(************)
dr.Read();
this.Image1.ImageUrl= "../Images/ "+dr.GetString(5).ToString();
this.lname.Text=dr.GetString(2).ToString();
this.lprice.Text=dr[ "ShopPrice "].ToString();
this.linstruction.Text=dr.GetString(3).ToString();
if(this.linstruction.Text.Length <=20)
{
this.linstruction.Text=dr.GetString(3).ToString();
}
else
{
this.linstruction.Text=dr.GetString(3).ToString().Substring(0,20);
}
this.HyperLink1.NavigateUrl= "../Images/ "+dr.GetString(5).ToString();
dr.Close();

}


}
}





[解决办法]
打开了多个conn 而conn 又没有关闭才会出现这样的错误啊?
使用完就得关闭,有最大连接限制的.
[解决办法]
打开了记得关闭数据库
[解决办法]
public OleDbDataReader Select(string sqltext)
{
OleDbConnection conn=this.OleDbConn();
OleDbCommand cmd=new OleDbCommand(sqltext,conn);
conn.Open();
return cmd.ExecuteReader();
}

在网页之间如果方法的传值最好不要用DataReader对象,涉及到连接释放的问题,建议你的返回类型改为DataSet

热点排行