关于“已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。”

如题:关于“已有打开的与此Command相关联的DataReader,必须首先将它关闭。”代码如下:SqlConnectionconn=newSqlConnection(... 如题:关于“已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。”

代码如下:

SqlConnection conn = new SqlConnection(connStr);
string sqlStrSelect="SELECT * FROM BXPB WHERE BH='"+bh+"'";
SqlCommand cmdSelect=new SqlCommand(sqlStrSelect,conn);
conn.Open();
SqlDataReader dr=cmdSelect.ExecuteReader();
if(!dr.Read()) //如果还没有该物品编号记录
{
string sqlStr="INSERT INTO BXPB VALUES (:SYRY,:XM,:XH,:BH,:SL,:CD,:GMRQ)";
SqlCommand cmd=new SqlCommand(sqlStr,conn);
//添加参数
cmd.Parameters.Add(":SYRY",SqlDbType.Char,8).Value=StuSY.Text.Trim();
cmd.Parameters.Add(":XM",SqlDbType.Char,20).Value=StuXM.Text.Trim();
cmd.Parameters.Add(":XH",SqlDbType.VarChar,50).Value=StuXH.Text.Trim();
cmd.Parameters.Add(":BH",SqlDbType.Char,12).Value=StuBH.Text.Trim();
cmd.Parameters.Add(":SL",SqlDbType.Int).Value=StuSL.Text.Trim();
cmd.Parameters.Add(":CD",SqlDbType.Char,20).Value=StuCD.Text.Trim();
cmd.Parameters.Add(":GMRQ",SqlDbType.Timestamp).Value=StuRQ.Text.Trim();
cmd.ExecuteNonQuery(); //执行插入记录的SQL语句
Response.Write("<script>alert('添加成功!')</script>");
}
else
{
Response.Write("<script>alert('该物品已存在!')</script>");
return;
}
conn.Close();
展开
 我来答
OfferComing留学
2022-12-22 · OfferComing一站式留学攻略
OfferComing留学
向TA提问
展开全部

DataReader 在打开使用时,一个 SqlConnection 只允许打开一个 DataReader,在开启另一个 DataReader 时,必须将前面一个先 Close 掉。

1、使用数据库更新或插入语句时,通常用 SqlCommand 的 ExecuteNonQuery() 方法,并且定义了一个公共的数据库连接,每次查询时都生成新连接不会有这个问题,但会占用高的数据库资源。

2、这种情况下,内部会生成一个空的 DataReader 对象,当前的数据库连接关闭掉后,该 DataReader 才会释放,因此在推荐使用 using 关键字,可以将它所定义范围内的对象都释放掉。

3、也可以设定ConnectionString,直接加上MultipleActiveResultSets=true语句,只适用于SQL 2005之后的版本,先读出放置在List中。

4、改为下图代码之后,ToList之后就被读到内存中了,与DataContext脱钩了。

大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
百度网友9de5b9a
2012-08-11 · TA获得超过894个赞
知道小有建树答主
回答量:361
采纳率:0%
帮助的人:457万
展开全部
SqlDataReader dr=cmdSelect.ExecuteReader();
改成

SqlDataReader dr=cmdSelect.ExecuteReader(CommandBehavior.CloseConnection);
这个是 SqlDataReader 特性,用完必须关闭,不然下次SqlDataReader 会出现这个错误
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式