一个按钮的点击功能
protected void delete_rz_Click(object sender, EventArgs e)
{
for (int i = 0; i < rz_show.Rows.Count; i++)
{
SqlDataReader dr = cmd1.ExecuteReader();
dr.Read();
int logid = Convert.ToInt32(dr["log_ID"]);
CheckBox ckbox = (CheckBox)rz_show.Rows[i].FindControl("check_id");
if (ckbox.Checked)
{
SqlCommand cmd2 = new SqlCommand("Delete from Content where log_ID='" + logid + "'", conn);
cmd2.ExecuteNonQuery();
}
dr.Close();
}
}
然后当我点击的时候就会报错:
已有打开的与此命令相关联的 DataReader,必须首先将它关闭我尝试了SqlDataReader dr = cmd1.ExecuteReader();放for上面
或者dr.Close();放for外面都是这个错误应该怎么写呢??
protected void delete_rz_Click(object sender, EventArgs e)
{
for (int i = 0; i < rz_show.Rows.Count; i++)
{
SqlDataReader dr = cmd1.ExecuteReader();
dr.Read();
int logid = Convert.ToInt32(dr["log_ID"]);
CheckBox ckbox = (CheckBox)rz_show.Rows[i].FindControl("check_id");
if (ckbox.Checked)
{
SqlCommand cmd2 = new SqlCommand("Delete from Content where log_ID='" + logid + "'", conn);
cmd2.ExecuteNonQuery();
}
dr.Close();
}
}
然后当我点击的时候就会报错:
已有打开的与此命令相关联的 DataReader,必须首先将它关闭我尝试了SqlDataReader dr = cmd1.ExecuteReader();放for上面
或者dr.Close();放for外面都是这个错误应该怎么写呢??
dr.Read();
int logid = Convert.ToInt32(dr["log_ID"]);
dr.Close();
或
SqlConnection con2 = new SqlConnection("");
SqlCommand cmd2 = new SqlCommand("", con2);
cmd2.ExecuteNonQuery();
错误不是出在"dr.Close();"
而是连接对象conn的打开与关闭
显然你这里还不行
这个方法解决了刚才的问题,
现在有新问题了,
SqlDataReader dr = cmd1.ExecuteReader();
for (int i = 0; i < rz_show.Rows.Count; i++)
{
dr.Read();
int logid = Convert.ToInt32(dr["log_ID"]);
dr.Close();
……
我想在循环的时候一条一条读下去,可是循环第2次他就报错“阅读器关闭时尝试调用 Read 无效”
SqlDataReader dr = cmd1.ExecuteReader();放for里面可以的,但是这样永远读的是第一条记录
怎么解决这个问题呢?
这种循环为什么不会出现
“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”
循环一直在使用Read()
非常感谢!