2017-09-26 41 views
0

每一行每一列有办法指数读者变量,这样我可以访问就是BEING选择的每一个用户?由于这只能得到第一个记录每次访问上的SqlCommand的ExecuteReader和

using (SqlCommand cmd = new SqlCommand("Select * from users", con)) 
{ 
    using (SqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       user = new Users(reader["name"].ToString(), reader["image_path"].ToString()); 

       //MessageBox.Show(reader[1].ToString() + " " + reader[2].ToString()); 
      } 
     } 
    } 
} 
+0

阅读器只有一个(不要读者[1]),但每一次迭代将返回一个新的行..我不明白你需要什么。 – rmjoia

回答

3

我认为你误解了SqlDataReader的目的。

每个遍历

while (reader.Read()) 

将通过返回的数据集的行进行迭代。如果你想显示一个消息框,每一个用户,你的代码应该看起来像下面这样。

using (SqlCommand cmd = new SqlCommand("Select * from users", con)) 
    { 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       user = new Users(reader["name"].ToString(), reader["image_path"].ToString()); 
       MessageBox.Show(user.ToString()); 
      } 
     } 
    } 

如果您想要显示最后加入的所有用户,您需要执行以下操作。

var users = new List<Users>(); 
    using (SqlCommand cmd = new SqlCommand("Select * from users", con)) 
    { 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       user = new Users(reader["name"].ToString(), reader["image_path"].ToString()); 
       users.Add(user); 
      } 
     } 
    } 

    MessageBox.Show(string.Join(" ", users.Select(x => x.ToString()));