//连接数据库代码省略          
string selectStr = "select Urnum from userinfo where Uname='"+textBox1.Text+"'";
SqlCommand cmd = new SqlCommand(selectStr, connect);
SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
{                    int i=0;
                    string[] rid = new string[10000];
                    dr.Close();
                   while(dr.Read())//把datareader的值逐个加到数组中
                    {
                        rid[i]=dr["Urnum"].ToString();
                        i=i+1;
                    }
                    MessageBox.Show(rid[0].ToString());
}
每一次看到的rid[0]都不是我想要的第一条记录,而是datareader的第二条记录,datareader应该自动从第一条记录开始往下才对,不知道什么原因

解决方案 »

  1.   

    上面的代码多加了个dr.close(),我原来是没加的,一是疏忽忘了把那一行删了
      

  2.   

    string selectStr = "select Urnum from userinfo where Uname='"+textBox1.Text+"'"; 
    SqlCommand cmd = new SqlCommand(selectStr, connect); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    if(dr.HasRows) //这里不能用dr.Read(),会走一条记录
    {                     int i=0; 
                        string[] rid = new string[10000]; 
                      while(dr.Read())//把datareader的值逐个加到数组中 
                        { 
                            rid[i]=dr["Urnum"].ToString(); 
                            i=i+1; 
                        } 
                        MessageBox.Show(rid[0].ToString()); 

      

  3.   


    string selectStr = "select Urnum from userinfo where Uname='"+textBox1.Text+"'"; 
    SqlCommand cmd = new SqlCommand(selectStr, connect); 
    SqlDataReader dr = cmd.ExecuteReader();                     int i=0; 
                        string[] rid = new string[10000];                   while(dr.Read())//把datareader的值逐个加到数组中 
                        { 
                            rid[i]=dr["Urnum"].ToString(); 
                            i=i+1; 
                        } 
                        MessageBox.Show(rid[0].ToString()); 
      

  4.   

    不要加IF判断,用WHILE就行了,如果没记录,就为FALSE,不走WHILE循环的.