2

例如,我有一个名为 dbuser 的数据库:

username: teste
password: xxxx
isonline: 1

username: teste2
password: xxxx
isonline: 1

我认为这个查询:

"SELECT username FROM dbuser  WHERE (isonline ='1')"

会同时返回 teste 和 teste2,但是当我在 MessageBox 中询问结果时,同时 teste 和 teste2 都在线时,它只显示 teste,但是当我关闭 teste 连接时,它会在 MessageBox 中出现 teste2。我猜它只返回第一行给我,那么我怎样才能得到所有的值呢?

这是方法代码:

public static string GetOnline() 
{ 
  string listaOnline; 
  listaOnline = ExecuteQuery("SELECT * username FROM dbuser WHERE (isonline ='1')").ToString();
  return listaOnline;
} 

我把它显示为MessageBox.Show(DbManager.GetOnline());

4

3 回答 3

5

这应该以最快的方式为您提供所需的字符串列表。reader.GetString(0)意味着您从索引为 0 的列中获取一个字符串值(所以是第一个)。

List<string> result = new List<string>();

using (SqlConnection connection = new SqlConnection(databaseConnectionString))
{
  connection.Open();
  using (SqlCommand command = new SqlCommand(query, connection))
  {
    command.CommandType = CommandType.Text;
    using (SqlDataReader reader = command.ExecuteReader())
    {
      while (reader.Read())
      {
        result.Add(reader.GetString(0));
      }

      reader.Close();
    }
    command.Cancel();
  }
}

return result;
于 2012-12-06T12:21:51.180 回答
0

尝试以下操作,为用户创建一个类:

[Table(Name = "foo")]
public class Users
{
   [Column(Name = "user_name")]
   username {get; set;};

   [Column(Name = "user_pword")]
   password {get; set;};

   [Column(Name = "user_isonline")]
   isonline {get; set;};
}


public static List<Users> GetOnline() 
{ 
   List<Users> listaOnline = new List<Users>(); 
   listaOnline = ExecuteQuery("SELECT * username FROM dbuser WHERE (isonline ='1')");
   return listaOnline;
} 
于 2012-12-06T12:25:05.420 回答
0

你可以这样做,它只是代码的大纲,会给你一些提示(需要在名称之间添加一些空格/特殊字符)。

string user = string.Empty;
foreach (var item in DbManager.GetOnline())
{
    user += item;
}
MessageBox.Show(user);

希望它会有所帮助..

您也可以通过以下方式进行操作:

List<string> listUser= new List<string>();
listUser =DbManager.GetOnline();
string users= string.Join(",", listUser.ToArray());
 MessageBox.Show(users);

这样,用户名将被打印出来,以“,”分隔。

于 2012-12-06T12:39:20.037 回答