SqlDataReader 出现问题

异常详细信息: System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

代码如下:
private void dbDataBind()
{
DataSet dset = new DataSet();
int roleid = Convert.ToInt32(Request.QueryString["itemid"]);
conn = new SqlConnection(connStr);
conn.Open();
string SqlString = "select userid from userrole where roleid='" + roleid + "'";
SqlCommand comm = new SqlCommand(SqlString, conn);
SqlDataReader MyReader = comm.ExecuteReader();
while (MyReader.Read())
{
int userid = MyReader.GetInt32(0);
string sqlQueryUser = "select userid,username,truename,unitname,telnumber,email from res_user where userid='" + userid + " '";
comm = new SqlCommand(sqlQueryUser, conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(dset,"maintainusers");
}
this.gv_UserRole.DataSource = dset.Tables["maintainusers"];
this.gv_UserRole.DataKeyNames = new string[] { "userid" };//主键
this.gv_UserRole.DataBind();
MyReader.Close();
conn.Close();
ShowStats();
}
从用户角色表(userrole)中查出对应角色ID(roleid)的多个用户ID(userid),然后从SQL server数据库中查出每个userid对应的用户信息。
在while循环conn.close()会提示: while (MyReader.Read())行中, 阅读器关闭时 Read 的尝试无效。

“江湖新秀”的方法不错,但是,系统提示:int userid = userids[i];行中
无法将类型“object”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)

ArrayList userids = new ArrayList();
while(MyReader.Read())
userids.add(MyReader.GetInt32(0));
MyReader.Close();
for(int i = 0;i < userid.Count; i++)
{
int userid = userids[i];
string sqlQueryUser = "select userid,username,truename,unitname,telnumber,email from res_user where userid='" + userid + " '";
comm = new SqlCommand(sqlQueryUser, conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(dset,"maintainusers");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-05-30
把MyReader.Close();
放到da.Fill(dset,"maintainusers"); 后面啦..!!
第2个回答  2008-05-30
comm = new SqlCommand(sqlQueryUser, conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(dset,"maintainusers");

调用da.Fill的时候会conn.open()此时因为之前已经打开了,所以报错!

ASP.NET的SqlDataReader代码存在以下问题
这个有毛病。user本身在Sql中也算是关键字,所以你把它用作表名就和关键字冲突了,这是我的学生经常犯的毛病。到数据库中,把user表名改成别的,比如userInfo,就没问题了 注意,改完后,代码里的也要对应更改 select * from userInfo

SqlDataReader sqldatareader = sqlcommand.ExecuteReader();出 ...
1、当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用完毕应该马上调用SqlDataReader.Close()关闭它。 2、一个连接只能被一个SqlDataReader使用,这也是为什么要尽早关闭SqlDataReader的原因。 3、使用完SqlDataReader后,你可以在程序中显示的调用数据库连接对象...

sqldatareader 的问题,求教吖!
string sqlStr = "select userName,name,answer1,answer2,answer3 from tbl_Information" + " where (userName= '" + CPublic.userInfo[0] + "')";where 前少空格了,SQL语句错误。

SqlDataReader 出现问题
MyReader.Close();for(int i = 0;i < userid.Count; i++){ int userid = userids[i];string sqlQueryUser = "select userid,username,truename,unitname,telnumber,email from res_user where userid='" + userid + " '";comm = new SqlCommand(sqlQueryUser, conn);SqlDataAdapter d...

本人刚学.net,请问下面这句SqlDataReader调用错在哪里了?
在方法public SqlDataReader get_sqldatareader(string sqlcon)中末尾添加一句代码:return dr;public SqlDataReader get_sqldatareader(string sqlcon){ con.ConnectionString = constr;con.Open();cmd.Connection = con;cmd.CommandText = sqlcon;cmd.CommandType = CommandType.Text;SqlDataReader dr =...

SqlDataReader无法从数据库中读取多条记录
} dr.Close();这样是没有问题的,可以读取多条数据.dr.Read()方法读取下一条数据成功就返回true,失败,即读取完毕时返回false.至于只能读取一条数据,可能是这个存储过程只返回了一条数据,或者其他什么原因,我没有用过SQLServerHelper,不是很清楚.可以在数据库里调用那个存储过程试试,看看返回了多少数据....

【asp.net】SqlDataReader 问题!读到空数据。
如果读到数据库中没有数据的话,应该会报错的,要提高容错力,那么你就这样判断:SqlCommand cmd=new SqlCommand(); SqlDataReader dr=cmd.excutereader();\/\/拼错了, if(dr.HasRows)\/\/是属性,不是方法,判断是否有行{\/\/如果有行while(dr.reader(){\/\/你的代码})}else{\/\/如果没有response....

sqldatareader问题 asp.net
你用CommandBehavior.CloseConnection 的意思是 当我们把reader关闭时 connection自动关闭

SqlDataReader 的read方法读不到数据表,是为什么
read方法读不到数据表?是指什么意思,应该是哪里有错误了.给你个案例如下ASP.NET案例:1:db文件夹中把sql脚本执行即可.2.web.config连接字符串改掉.3.已经包含了SqlDataReader的读取.希望能帮到你!

提示“已有打开的与此Command相关联的DataReader,必须首先将它关闭...
DataReader 在打开使用时,一个 SqlConnection 只允许打开一个 DataReader,在开启另一个 DataReader 时,必须将前面一个先 Close 掉。1、使用数据库更新或插入语句时,通常用 SqlCommand 的 ExecuteNonQuery() 方法,并且定义了一个公共的数据库连接,每次查询时都生成新连接不会有这个问题,但会占用高...

相似回答
大家正在搜