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

liu_ff123 2007-05-18 02:28:05
刚开始运行时都很正常,每个页面都可以正常显示,当在页面间多次浏览,最后浏览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();

}


}
}






...全文
1190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shgh_1983 2008-09-04
  • 打赏
  • 举报
回复
public OleDbDataReader Select(string sqltext)
{
using(OleDbConnection conn=this.OleDbConn())
{
OleDbCommand cmd=new OleDbCommand(sqltext,conn);
conn.Open();
return cmd.ExecuteReader();
}


}
这样处理一下连接 试试,每次用完连接自动释放
mylu520 2007-12-31
  • 打赏
  • 举报
回复
我的也是的这样子,有没有人回答啊!
amandag 2007-05-18
  • 打赏
  • 举报
回复
public OleDbDataReader Select(string sqltext)
{
OleDbConnection conn=this.OleDbConn();
OleDbCommand cmd=new OleDbCommand(sqltext,conn);
conn.Open();
return cmd.ExecuteReader();
}

在网页之间如果方法的传值最好不要用DataReader对象,涉及到连接释放的问题,建议你的返回类型改为DataSet
shuo_shu 2007-05-18
  • 打赏
  • 举报
回复
打开了记得关闭数据库
liu_ff123 2007-05-18
  • 打赏
  • 举报
回复
看来是分数太少,没人愿回答。哎!
  • 打赏
  • 举报
回复
打开了多个conn 而conn 又没有关闭才会出现这样的错误啊?
使用完就得关闭,有最大连接限制的.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace 保存GRID数据示例 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { //提示是否修改 #region//--------修改数据就将数据保存并显示 if (MessageBox.Show("是否保存数据?", "系统消息", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK) { #region ..........这里是保存数据代码 //结束编辑 dataGridView1.EndEdit(); //重新用表格数据填充数据容器 OleDbDataAdapter Ada = new OleDbDataAdapter(); DataTable table = (DataTable)dataGridView1.DataSource; //重新启动连接 String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "/驱动.mdb"; //用Buider方法更新数据 using (OleDbConnection connection = new OleDbConnection(ConnectionString)) { Ada.SelectCommand = new OleDbCommand("SELECT * FROM 表", connection); OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada); Ada.UpdateCommand = builder.GetUpdateCommand(); try { //更新数据表数据时 Ada.Update(table); table.AcceptChanges(); MessageBox.Show("操作已成功!数据将全部被保存......", "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } } #endregion } #endregion #region //--------不修改就初始化显示以前数据 else { MessageBox.Show("用户取消操作,数据将恢复到初始状态......"); OleDbConnection A = new OleDbConnection(); A.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "/驱动.mdb"; try { A.Open(); DataSet B = new DataSet(); string sqlStr = "Select * from 表"; OleDbDataAdapter C = new OleDbDataAdapter(sqlStr, A); C.Fill(B); dataGridView1.DataSource = B.Tables[0]; } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } finally { A.Close(); } } #endregion } private void button1_Click(object sender, EventArgs e) { OleDbConnection A = new OleDbConnection(); A.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "/驱动.mdb"; try { A.Open(); DataSet B = new DataSet(); string sqlStr = "Select * from 表"; OleDbDataAdapter C = new OleDbDataAdapter(sqlStr, A); C.Fill(B); dataGridView1.DataSource = B.Tables[0]; } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } finally { A.Close(); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } } }

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧