Access数据库可把我难坏了(:

lcy5415 2004-04-15 09:54:57
一个sql的小项目,成功移至Access数据库,当频繁点页面时总出错.程序是用三层,读数据库用了数据库访问类,我查了半天找不到原因,

类中代码:

public OleDbDataReader GetDataReader(string selectCmd) // Select From Table
{
OleDbConnection m_SqlConnection = new OleDbConnection(m_dbConnection);
OleDbCommand m_SqlCommand = new OleDbCommand(selectCmd, m_SqlConnection);
try
{
m_SqlCommand.Connection.Open();
} // end try
catch (Exception e)
{
throw new Exception("Error in DataBase:GetDataReader()-> " + e.ToString());
}
return m_SqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
} // end Select



出错代码:

Error in CInfo:Select()-> System.Data.OleDb.OleDbException: 未指定的错误 at System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) at System.Data.OleDb.OleDbConnection.InitializeProvider() at System.Data.OleDb.OleDbConnection.Open() at ElectWeb.CTree.Select() in D:\MyPro\ElectWeb\Components\CTree.cs:line 103


是程序的错还是access本身的错?我很少用access数据库.

请各位兄弟帮看看,up也有1-5分,挺急,这个搞定,这个项目也就完成了:)

...全文
79 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
erist 2004-04-16
  • 打赏
  • 举报
回复
得到reader后应该关闭连接

lcy5415 2004-04-15
  • 打赏
  • 举报
回复
T0:陕北吴旗娃)

一个类中的函数是这样,该类继承自数据访问类


public string GetNodeName(int id)
{
string str="";
string sql="select Title from Tree WHERE id="+id+"";
OleDbDataReader dr=this.GetDataReader(sql);
if(dr.Read())
{
if (!Convert.IsDBNull(dr["Title"])) str=dr["Title"].ToString();
}
return str;

}
lcy5415 2004-04-15
  • 打赏
  • 举报
回复
我改成这样也不行,好了一点也不行,快速连击50多次就不行了,不过已不影响正常使用.


public bool Select()
{
bool Found = false;
string selectCmd = "SELECT * FROM Tree WHERE id="+m_id+"";
if (m_dbSelect!=null) selectCmd = m_dbSelect;

OleDbConnection m_SqlConnection = new OleDbConnection(m_dbConnection);
OleDbCommand m_SqlCommand = new OleDbCommand(selectCmd, m_SqlConnection);

try
{
m_SqlCommand.Connection.Open();
OleDbDataReader m_SqlDataReader = m_SqlCommand.ExecuteReader();

if (m_SqlDataReader.Read())
{
Found = true;
ReadDataReader(m_SqlDataReader);
}
m_SqlDataReader.Close();
} // end try
catch (Exception e)
{
throw new Exception("Error in CInfo:Select()-> " + e.ToString());
}
finally
{
m_SqlCommand.Dispose();
m_SqlConnection.Close();
m_SqlConnection.Dispose();
}
return Found;
} // end Select
flyingxfxf 2004-04-15
  • 打赏
  • 举报
回复
哈哈,把问题讨论的深入些吧。
大家说法不一样啊。
yaotiebing 2004-04-15
  • 打赏
  • 举报
回复
看看你的connectionstring对不对
smoothwood 2004-04-15
  • 打赏
  • 举报
回复
连点25次是什么意思?点一个按钮25次?
yaotiebing 2004-04-15
  • 打赏
  • 举报
回复
没有正确连接到数据库
einsteincao 2004-04-15
  • 打赏
  • 举报
回复
偶说过了

如果没有三层代码是一定能够实现的

在三层当中甚至用上了GC.collect(2);也就是收集所有垃圾的语句都是没有用的

更不用说.Close()了

而且PetShop当中的SQLHelper类使用时用的是using自动释放connection也是不行的

所以偶试了3天放弃了

1.放弃三层(放弃三层后在.aspx.cs中写是一定可以的,你一定能完成)

2.改用SQLserver数据库(模仿PetShop 啊)



CMIC 2004-04-15
  • 打赏
  • 举报
回复
return m_SqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
--------------------------------------------------------------------
MSDN上说
如果创建了 SqlDataReader 并将 CommandBehavior 设置为 CloseConnection,则关闭 SqlDataReader 会自动关闭此连接。
但情况不是完全这样的,只有SqlDataReader绑定到DataGrid等对象上时,关闭SqlDataReader时才会关闭连接,建议你手动关闭连接,m_SqlCommand.Connection.Close();
pycys001 2004-04-15
  • 打赏
  • 举报
回复
up 5 分
活靶子哥哥 2004-04-15
  • 打赏
  • 举报
回复
PetShop中返回DataReader的方法,使用Out参数
public void RunProc(string procName, out SqlDataReader dataReader)
{
SqlCommand cmd = CreateCommand(procName, null);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}


lcy5415 2004-04-15
  • 打赏
  • 举报
回复
连点25 次还是死掉!!!!!

Error in CInfo:Select()-> System.Data.OleDb.OleDbException: 未指定的错误 at System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) at System.Data.OleDb.OleDbConnection.InitializeProvider() at System.Data.OleDb.OleDbConnection.Open() at ElectWeb.CInfo.Select() in d:\mypro\electweb\components\cinfo.cs:line 122
lcy5415 2004-04-15
  • 打赏
  • 举报
回复
正在试smoothwood(I try my best) 的方法,等结果出来告诉大家
flyingxfxf 2004-04-15
  • 打赏
  • 举报
回复
由这个问题。想到软件测试的问题。 
就像楼主说的,一般的用户是不会这么操作的。
但是一个软件总有自己的承受能力,怎么样进行有效的测试呢?
谁有这种测试程序的,给大家讲讲
Jouzen 2004-04-15
  • 打赏
  • 举报
回复
得到reader后应该关闭连接
flyingxfxf 2004-04-15
  • 打赏
  • 举报
回复
大概要检查下代码中没有释放连接的地方。并加上 conn.Close() 吧。
lcy5415 2004-04-15
  • 打赏
  • 举报
回复
天呀,放弃三层可怎么办,一页页写我现在都不会了,einsteincao(至尊宝) 再说细一些你的解决方案!!!!!!!!!!!

繁点页面是指连续的点击,当然一般用户是不会这样的!主要原因就是Connection没法释放造成的,可我不知道怎么写.access真的不怎样,但客户要求这个,没办法!

smoothwood 2004-04-15
  • 打赏
  • 举报
回复
恩...如果还有问题,我们大家在讨论哈!祝你好运
smoothwood 2004-04-15
  • 打赏
  • 举报
回复
恩...原因估计是数据库连接没有释放..用一点补救办法把

你在
try
{
m_SqlCommand.Connection.Open();
}
之前,先判断一下链接状态:我是用VB.NET写的,你自己改一下应该没有问题吧!
If conn.State = ConnectionState.Open Then
conn.Close()
End If 'conn为连接对象
flyingxfxf 2004-04-15
  • 打赏
  • 举报
回复
三层和access有这种冲突么?不会吧,我也没有这方面的经验,帮你UP下。
你说的当频繁点页面 是什么程度的?总有个测试的方法吧。
加载更多回复(6)

62,025

社区成员

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

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

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

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