已有打开的与此命令相关联的DataReader,必须首先将它关闭

lijucheng8 2010-03-28 05:26:32
我在asp.net(c#)中,有一个查询功能:
dataset ds=dbhelpersql.getdataset("select * from ...");

getdataset的代码如下:
public static dataset setdataset(string sqlstring)
{
open();
sqldataadapter adapter=new sqldataadapter(sqlstring,conncetion);
dataset dataset=new dataset();
adapter fill(dataset);
close();
retuern dataset;
}

open()的代码如下:
public static open()
{
if(connection==null)
{
connection=new sqlconnection(connectionstring);
}
if (connection.state.equals(connectionstate.closed))
connection.open();
}

close()代码如下:
public static close()
{

if(connection!=null)
{
connection.close();

}

当我在二台电脑上快速按下同一按钮一段时间,会出现“已有打开的与此命令相关联的DataReader,必须首先将它关闭”,在其他地方也有这个想象,我电脑系统是xp,sql2000
查了一下网上,说是要关闭datareader,不知如何处理,请高手指教,不胜感谢!
...全文
889 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrb1983 2010-11-09
  • 打赏
  • 举报
回复
登录了怎么还看不到
小范f-li.cn 2010-03-29
  • 打赏
  • 举报
回复
bj
lijucheng8 2010-03-29
  • 打赏
  • 举报
回复
还是人生如梦“using(SqlConnetion conn=new SqlConnetion(""))”这句话,提示了我,谢谢啊
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
getdataset写成setdataset了,不好意思
yangzhiminyy 2010-03-28
  • 打赏
  • 举报
回复
你贴出的程序本身没有错误SetDataSet,但是你的程序调用的是
dataset ds=dbhelpersql.getdataset("select * from ...");
没有调用 SetDataSet, 调用的是GetDataSet
请帖出GetDataSet
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
程序是这样的,也不知道怎么改啊
using System.Text;

namespace ZWL.DBUtility
{
/// <summary>
/// 数据访问抽象基础类
/// Copyright (C) 2004-2008 By zwl
/// </summary>
public abstract class DbHelperSQL
{
private static readonly string RETURNVALUE = "RETURNVALUE";
public DbHelperSQL()
{

}
//定义连接字符串。
protected static string ConnectionString = DecryptDBStr(ConfigurationManager.AppSettings["SQLConnectionString"], "zhangweilong");
protected static SqlConnection Connection;
protected static SqlConnection Connection1;
//定义数据库的打开和关闭方法
protected static void Open()
{
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
}
doubleu2005 2010-03-28
  • 打赏
  • 举报
回复
人生如梦也够指点你了
秋的红果实 2010-03-28
  • 打赏
  • 举报
回复
奥,你open()里具体连接库了
那这样,只声明下,写成这样:
public static dataset setdataset(string sqlstring)
{
//这里定义局部变量connection,connection作用域不就在此范围了;缺点是服务器内存占用多,当同时访问的人多时,你可以在close()里connection.Dispose()补偿下
sqlconnection connection; //把你原来静态的conncetion删除


open();
sqldataadapter adapter=new sqldataadapter(sqlstring,conncetion);
dataset dataset=new dataset();
adapter fill(dataset);
close();
retuern dataset;
}
秋的红果实 2010-03-28
  • 打赏
  • 举报
回复
只从这段代码看,与DataReader无关呀,好像就是“公共变量”connection所致吧,建议不在万不得已的情况下,不要使用“公共变量”,改成这样试下:
public static dataset setdataset(string sqlstring)
{
//这里定义局部变量connection,connection作用域不就在此范围了;缺点是服务器内存占用多,当同时访问的人多时,你可以在close()里connection.Dispose()补偿下
sqlconnection connection=new ...

open();
sqldataadapter adapter=new sqldataadapter(sqlstring,conncetion);
dataset dataset=new dataset();
adapter fill(dataset);
close();
retuern dataset;
}

lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
看了一下贴,好像孟子E章名气大,烦请孟老师出手,不知怎样才能找到他
wuyq11 2010-03-28
  • 打赏
  • 举报
回复
数据库操作看看sqlhelper
using(SqlConnetion conn=new SqlConnetion(""))
{}
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
没有用datareader的,点一段时间、还是可以,点久了就不行,
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
人生如梦)你能否留一个电话,我打过来
wuyq11 2010-03-28
  • 打赏
  • 举报
回复
其他操作是否使用了datareader
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
csdn人气还是旺啊,但还没有解决这个问题,我觉得要改一改论坛管理方法,到这来提问的,肯定急于想知道答案,说实话,出点钱都是可以的,那位提出一个具体可行的方案来,
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
public static dataset setdataset(string sqlstring)
{
open();
sqldataadapter adapter=new sqldataadapter(sqlstring,conncetion);
dataset dataset=new dataset();
adapter fill(dataset);
close();
retuern dataset;
}

open()的代码如下:
public static open()
{
if(connection==null)
{
connection=new sqlconnection(connectionstring);
}
if (connection.state.equals(connectionstate.closed))
connection.open();
}

close()代码如下:
public static close()
{

if(connection!=null)
{
connection.close();

}
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
程序里没有SqlDataReader:
public static dataset setdataset(string sqlstring)
{
open();
sqldataadapter adapter=new sqldataadapter(sqlstring,conncetion);
dataset dataset=new dataset();
adapter fill(dataset);
close();
retuern dataset;
}
wuyq11 2010-03-28
  • 打赏
  • 举报
回复
SqlDataReader 要先关闭,再执行ExecuteNonQuery操作
dr.Read();
int logid = Convert.ToInt32(dr["ID"]);
dr.Close();

using (SqlDataReader dr1 = cmd1.ExecuteReader())
{
while (dr1.Read())
{

SqlConnection cn2 = new SqlConnection(connectionString);
SqlCommand cmd2 = new SqlCommand("", cn2);



}
}
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
周公,我看不回帖不少,来点具体的
lijucheng8 2010-03-28
  • 打赏
  • 举报
回复
好像碰到这个问题的人不少,但好像在论坛里都没有解决。在线等待。。。。
加载更多回复(15)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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