ASP.NET 三成架构 SqlDataReader 问题

我在一个方法内,调用了2次SqlDataReader,在第一次还未关闭前又调用了第二次,这时报错,请问如何解决?publicstaticStudentModelssele... 我在一个方法内,调用了2次SqlDataReader,在第一次还未关闭前又调用了第二次,这时报错,请问如何解决?
public static StudentModels select()
{
string sql = "select * from student";
SqlDataReader dr = DB.dr(sql);
if (dr.Read())
{
StudentModels sm = new StudentModels();
sm.Id = Convert.ToInt32(dr["id"]);
sm.Name = dr["name"].ToString();
sm.Sex = dr["sex"].ToString();
sm.Cm = ClassService.selectAll(dr["classID"].ToString());
dr.Close();
return sm;
}
public static ClassModels selectAll(string classID)
{
string sql = "select * from class where classID = '" + classID + "'";
SqlDataReader dr = DB.dr(sql);
if (dr.Read())
{
ClassModels cm = new ClassModels();
cm.Id = Convert.ToInt32(dr["id"]);
cm.ClassID = dr["classID"].ToString();
dr.Close();
return cm;
}
展开
 我来答
yaojian5888
2009-03-03
知道答主
回答量:25
采纳率:0%
帮助的人:19.4万
展开全部
DataReader 使用一次后必须关闭,要不然下一次就不能打开,这是我写的一读取方法\_____________

SqlDataReader db = null;
SqlCommand cmd = new SqlCommand();
if (cmd == null) throw new ArgumentNullException("cmd");
if (commandText.Equals(string.Empty) || commandText.Length == 0) throw new ArgumentException("commandText");
Connect();
cmd.Connection = cn;
cmd.CommandType = commType;
cmd.CommandText = commandText;
if (par != null)
foreach (SqlParameter p in par)
cmd.Parameters.Add(p);
if (cn.State != ConnectionState.Open)
cn.Open();
using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (dr.Read())
{
db = dr;
}
dr.Close();
dr.Dispose();
}
Close();
return db;
百度网友94f02eb
2009-02-23 · TA获得超过8613个赞
知道大有可为答主
回答量:7955
采纳率:74%
帮助的人:4516万
展开全部
解决方法:
第一种: 关闭第一个,再用第二个

第二种: 给两个DATAREADER, 分别指定一个不同的CONNECTION
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式