【问题标题】:SQL query result to array/ListSQL查询结果到数组/列表
【发布时间】:2018-05-07 09:55:54
【问题描述】:

以下是查询数据库获取用户id列表的C#代码:

int id;
con = new SqlConnection(Properties.Settings.Default.ConnectionStr);
con.Open();
id = 180;
SqlCommand command = new SqlCommand("Select userid from UserProfile where grpid=@id", con);
command.Parameters.AddWithValue("@id", id);

using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.Read())
    {
        Console.WriteLine(String.Format("{0}", reader["userid"]));
    }
}

con.Close();

输出:5629

实际上,Usersgrpid = 180 的列表是 5629、5684、5694

如何读取列表或数组中的结果?

【问题讨论】:

标签: c# sql sqlcommand


【解决方案1】:

简单地说:

List<int> results = new List<int>();
using (SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        results.Add((int)reader["userid"]));
    }
}
// use results

但是,您可能会发现像“Dapper”这样的工具可以节省时间

var results = con.Query<int>("Select userid from UserProfile where grpid=@id",
    new { id }).AsList();

【讨论】:

【解决方案2】:

只需定义一个List,然后使用like:

List<string> Users = new List<string>();
using (SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        Users.Add(reader[0].ToString());
    }
}

【讨论】:

    【解决方案3】:

    试试这个:

    var userIds = new List<int>();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            userIds.Add(reader.GetInt32(0));
        }
    }
    

    【讨论】:

      【解决方案4】:

      你可以使用这个扩展方法:

      public static class DbExtensions
      {
          public static List<T> ToList<T>(this IDataReader reader, int columnOrdinal = 0)
          {
              var list = new List<T>();
              while(reader.Read())
                  list.Add((T)reader[columnOrdinal]);
              return list;
          }
      }
      

      现在可以这样使用了:

      List<int> userIdList;
      using (var con = new SqlConnection(Properties.Settings.Default.ConnectionStr))
      {
          using(var command = new SqlCommand("Select userid from UserProfile where grpid=@id", con))
          {
             command.Parameters.AddWithValue("@id", id);
             con.Open();
             using (SqlDataReader rd = command.ExecuteReader())
                userIdList = rd.ToList<int>();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        相关资源
        最近更新 更多