: System.InvalidOperationException: 已有打开的与此连接相关联的 DataReader,必须首先将它关闭。

qxkls 2008-12-12 10:35:44
sqlConn = new SqlConnection(BP.DataAccess.Constants.ConnectString); string sql = "select count(name)as c,name from get_movie where datediff(dd,datet,getdate()) <7 and serialno = '"+name+"' group by name";
string sql1 = "insert into get_movie values('"+name+"','"+this.TextBox1.Text+"','"+DateTime.Now.ToString()+"','"+url+"','"+0+"','"+des+"')";
string sql2 = "select counts from hardinfo where serianlo = '"+name+"'";
cmd = new SqlCommand(sql,sqlConn);
cmd1 = new SqlCommand(sql1,sqlConn);
cmd2 = new SqlCommand(sql2,sqlConn);
SqlDataReader read = null;
SqlDataReader read2 = null;
sqlConn.Open();
read = cmd.ExecuteReader();
read2 = cmd2.ExecuteReader();
while(read.Read() && read2.Read())
{

int count = Convert.ToInt32(Convert.ToString(read.GetValue(0)));
int hard_info_count = Convert.ToInt32(read2.GetValue(0));
string names = Convert.ToString(read.GetValue(1));
if(count>hard_info_count)
{

Response.Write("<script>alert('请求失败,一周之内只能请求'"+hard_info_count+"'部影片!')</script>");
p =true;
return;
}
if(names == this.TextBox1.Text)
{
Response.Write("<script>alert('您已请求过此影片,请不要重复求片!')</script>");
p =true;
return;
}
}
sqlConn.Close();
if(p == false)
{
sqlConn.Open();
cmd1.ExecuteNonQuery();
sqlConn.Close();
Response.Write("<script>alert('影片信息已发出请等候!')</script>");
}






--------------


行 73: sqlConn.Open();
行 74: read = cmd.ExecuteReader();
行 75: read2 = cmd2.ExecuteReader();
行 76: while(read.Read() && read2.Read())
行 77: {

...全文
83 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinhl99 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyq11 的回复:]
先执行 read = cmd.ExecuteReader();
关闭后再执行
read2 = cmd2.ExecuteReader();
或通过存储过程和游标实现
[/Quote]

//同意,SqlDataReader实例是对数据库连接是独占的!只有关闭后,数据库连接才能给别的用。
supremeholy 2008-12-12
  • 打赏
  • 举报
回复
lz你的两个datareader用的是同一个con
HDNGO 2008-12-12
  • 打赏
  • 举报
回复
如果只是为了得到一个值做判断,用变量吧~

而且,count的话,一定会有一行的,不会为空的~
HDNGO 2008-12-12
  • 打赏
  • 举报
回复
insert操作干嘛用reader?
wuyq11 2008-12-12
  • 打赏
  • 举报
回复
先执行 read = cmd.ExecuteReader();
关闭后再执行
read2 = cmd2.ExecuteReader();
或通过存储过程和游标实现

anncesky 2008-12-12
  • 打赏
  • 举报
回复
用SqlDataAdapter吧,就不会有这样的问题

anncesky 2008-12-12
  • 打赏
  • 举报
回复
你实在是个初学者,还是不要用DataReader吧

用SqlDataAdapter吧,就这会有这样的问题

DataReader是独占的资源,两个一起打开是一行嘀,用完还要马上关闭
ViewStates 2008-12-12
  • 打赏
  • 举报
回复
为什么你要用两个READER?

62,046

社区成员

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

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

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

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