异常详细信息: 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();
}
}
}