为什么要在循环里关闭dr21?
dr21.Close();
dr21.Dispose();  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

解决方案 »

  1.   

    不关闭dr21.Close();
     dr21.Dispose();的话不执行下面的SQL语句啊,不关闭的话就会提示已有打开的与此命令相关联的DataReader,必须首先将它关闭。
      

  2.   

    建立两个SQLCONNECT,分别对应两个SqlDataReader,分别关闭就行了。
      

  3.   

      dr21.Close();
    拉到while外面去。都Close了自然不能再Read了。
      

  4.   

    dr21.Close();
     dr21.Dispose();放While外面,循环完毕再关掉,你第一次循环就关掉了,第二次循环当然有这提示了
      

  5.   


    可以写成函数方式,类似这样:
      private void button4_Click(object sender, EventArgs e)
            {
                SqlCommand cmd = new SqlCommand(); ;
                cmd.CommandText = "select top 100 * from lwmain where bj='0' order by id";
                SqlDataReader dr21 = cmd.ExecuteReader();
              
                    while (dr21.Read())
                    {
                      string  dd = dr21["dd"].ToString();
                      string   xjsj = dr21["xjsj"].ToString();
                      sqldata(dd,xjsj);
                    }
                    dr21.Close();
                    dr21.Dispose();        }
            public void sqldata(string s1, string s2)
            {
                SqlConnection con = new SqlConnection("Data Source=10.168.1.5;Initial Catalog=data;User ID=sa;password=sa;Integrated Security=False");
                con.Open();
                  string sql = "select * from lwjhkh where kssj<='" + s2 + "' and jssj>='" + s2 + "' and dd='" + s1 + "' and khzt='未到' and jhms='未到'";
                SqlCommand cmd = new SqlCommand(sql,con);
                cmd.ExecuteNonQuery();                          
                cmd.Dispose();
                con.Close();
            }