Invalid attempt to Read when reader is closed 错误的原因

lhappyb 2011-02-23 09:25:29
部分code,大家帮忙分析一下。

Global.asax文件
<script runat="server">

string SqlString;
ConnectDB connect;
SendCommand sendto;

void Application_Start(object sender, EventArgs e)
{
connect = new ConnectDB();
sendto = new SendCommand(Server.MapPath(@"~/Bin/SCCommandClient.dll"));
}

void Application_End(object sender, EventArgs e)
{
connect.CloseConnect();
}
</script>
数据库ConnectDB.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.MySqlClient;

public class ConnectDB
{
public static MySqlConnection conn;
public static MySqlCommand comm;

public ConnectDB()
{
conn = new MySqlConnection();
conn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
try
{
conn.Open();
}
catch (Exception ex)
{
conn.Open();
}

}

public static MySqlDataReader DataReader(string SqlString)
{
MySqlDataReader dr;
try
{
MySqlCommand comm = new MySqlCommand(SqlString, conn);
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);

}
catch(Exception e)
{
}
return dr;
}

public void CloseConnect()
{
conn.Close();
conn.Dispose();
}
}
页面
SqlString = "SELECT UserLevel,UserPer FROM Users WHERE UserName = 'mm'";
reader = ConnectDB.DataReader(SqlString);
if (reader.Read())
{
userlevel = Convert.ToInt32(reader["Userlevel"]);
}
reader.close();


开发的一个网站,其中数据读取全部使用的是DataReader,使用上面的代码,一个用户访问没有问题,
但是多个用户访问同一页面时,就会有时出现Invalid attempt to Read when reader is closed,
访问越多,提交多出现就多。
这里有几个问题问下大家:
1.Application_Start这个是每个用户访问服务器时都会调用的吧。数据类connection初始化在这里只有一次,是不是会有问题。
2.我的ConnectDB类里面的成员对象都是静态的,静态的属于全局变量,我测试发现,静态成员可以被多个登录用户共享其内容,就是不是属于用户全局,而是系统全局,那是不是我的connection由于是静态的,多用户访问都是用的同一个connection,不知道大家听懂意思没,还是我的理解有误。
3.大量使用datareader是不是会造成问题,因为它必须保持数据连接,而且独占模式,当另一个datareadre来访问时,就出现问题,我这样理解对不对
4.出现的问题,请大家帮忙,怎么可以解决。
谢谢!

...全文
1079 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2011-02-23
  • 打赏
  • 举报
回复
不要使用public static MySqlConnection conn;
PitTroll 2011-02-23
  • 打赏
  • 举报
回复
public static MySqlConnection conn;
public static MySqlCommand comm;

不能这样搞吧,多个人会相互影响的。
lhappyb 2011-02-23
  • 打赏
  • 举报
回复
是不是和我使用了
public static MySqlConnection conn;
public static MySqlCommand comm;
作为静态成员,造成所有用户都使用的同一连接有关
lhappyb 2011-02-23
  • 打赏
  • 举报
回复
CommandBehavior.CloseConnection
使用这个关闭reader时虽然也会关闭相应connection,
但如果多用户登陆他们的connection应该都互不影响八.
我这里是不是应该每次访问数据库都创建连接比较好,访问完就关闭,而不是一直使用一个connection.
子夜__ 2011-02-23
  • 打赏
  • 举报
回复
你的第三点已经把问题阐述清楚了。。

CommandBehavior.CloseConnection

SqlDataReader dr=cmd.ExecuteReader(CommandBehavior.CloseConnection)


注意控制你的 SqlDataReader 状态
lhappyb 2011-02-23
  • 打赏
  • 举报
回复
知道被关闭,但在哪里被关,为什么被关,我一个用户访问时是没有问题的。
wuyq11 2011-02-23
  • 打赏
  • 举报
回复
reader被关闭,不能读取数据

62,074

社区成员

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

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

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

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