明显的大错误,第一次if外
cmd=new SqlCommand(sql,con.link);
dr=cmd.ExecuteReader();
而第二个if语句又用了一次
cmd=new SqlCommand(sql,con.link);
      dr=cmd.ExecuteReader();

解决方案 »

  1.   

    当正在使用 SqlDataReader 时,关联的 SqlConnection 在忙于服务 SqlDataReader,而且除了关闭以外不能对 SqlConnection 执行其他任何操作。除非调用 SqlDataReader 的 Close 方法,否则会一直处于此状态。例如,在调用 Close 之前,无法检索输出参数。
      

  2.   

    C#中DataReader不能在不关闭的情况下调用另一个DataReader(或者同一个)。你可以结合DataSet和DataReader来实现。如果只用DataReader,楼主的不能实现。
      

  3.   

    先把表Usersongs绑定到dataset,如下:
       sql="select *  from UserSongs";
       SqlDataAdapter da=new SqlDataAdapter(sql,con);
       DataSet ds=new DataSet();
       da.Fill(ds,"UserSongs");
       DataTable dt=ds.Tables["UserSongs"];//把表usersongs绑定到datatable
       ////////////
       如果想读哪个列的内容就用
       dt.Columns["列名"].ToString();  //循环读出,然后再用你本来的那个循环
                                     //执行第二个表的内容
       //////////第二个表就用DataReader来操作
              
                                     wish u good luck
                                           Greatsft
      

  4.   

    if (dr.Read())
    {int uid;
          uid=(int)dr["uid"];
    dr.close();   do
         {
                //这里要去读出用户的名字
          sql="select *  from mp3_uinfo where uid="+uid;
          cmd=new SqlCommand(sql,con.link);
          dr=cmd.ExecuteReader();
          if (dr.Read())
          {
           Response.Write ("正确");
           }
         }while(dr.Read());
    }
      

  5.   

    to sjzwinfor(我我喜欢c#)
       你这样只能读一个uid所对应的mp3,而楼主要的是循环读出每一个
      

  6.   

    string sql;
    SqlCommand cmd;
    SqlDataReader dr;
    SqlDataAdapter myAda=new SqlDataAdapter();
    sql="select *  from UserSongs";
    con.open();
    cmd=new SqlCommand(sql,con.link);
    DataSet mySet=new DataSet();myAda.SelectCommand=cmd;
    myAda.Fill(mySet,"kk");
    //dr=cmd.ExecuteReader();
    if (mySet.Tables["kk"].Rows.Count<=0)
    {
         Response.Write ("无记录");
         return null;//退出
    }
    int uid;
    DataTable myTable=mySet.Tables["kk"];
    foreach(DataRow myRow in myTable.Rows)
    {
             uid=(int)myRow["uid"]
          //这里要去读出用户的名字
          sql="select *  from mp3_uinfo where uid="+uid;
          SqlCommand cmd1=new SqlCommand(sql,con.link);
          dr=cmd.ExecuteReader();
          if (dr.Read())
          {
           Response.Write ("正确");
           }
          dr.Close();
     }
      

  7.   

    就是啊。我要读出每一个的。以do while读出的uid,在来读mp3_uinfo里面的相应数据的。
      

  8.   

    不用do while 用foreach!!!
      

  9.   

    用foreach
       foreach 循环用于读出每个uid,再用刚才第二个语句查找该uid对应的mp3名