从数据库</int>返回List <int>

时间:2012-06-19 16:14:31

标签: c# sql-server list executescalar

我有一个简单的问题,即使谷歌搜索很多,我也无法找到答案。或许发布这个问题将有助于下一个寻找相同答案的可怜的灵魂。

我有一个返回不同ID的集合的查询。

我正在使用此查询创建SQLCommand并使用ExecuteScalar( )来运行它。

ExecuteScalar( )似乎返回一个对象,不允许我将其强制转换为List。

解决此问题的最佳做法是什么?如何解决此问题?

4 个答案:

答案 0 :(得分:6)

执行标量返回单个数据。想一行,一列。如果要返回集合,则需要致电ExecuteReader()。这将返回IDataReader。然后,您可以迭代记录并返回列表。

答案 1 :(得分:3)

ExecuteScalar

  

执行查询,并返回查询返回的结果集中第一行的第一列忽略其他列或行

您需要使用SqlDataReader

SqlCommand command = new SqlCommand(queryString, connection);
IList<int> ints = new List<int>();
using(SqlDataReader reader = command.ExecuteReader()) {
     while (reader.Read())
     {
         ints.add(reader.GetInt32(0)); // provided that first (0-index) column is int which you are looking for
     }
}

答案 2 :(得分:2)

ExecuteScalar() - 仅返回第一行和第一列....

检查msdn:SqlCommand.ExecuteScalar

你需要使用这样的东西来获得结果,即ExecuteReader

 using (IDataReader reader = 
        command.ExecuteReader(CommandBehavior.CloseConnection))
 {
      List<int> intlist = ReadList(reader);
 }

创建列表的方法

List<int> ReadList(IDataReader reader)
{
    List<int> list = new List<int>();
    int column = reader.GetOrdinal("MyColumn");

    while (reader.Read())
    {
        //check for the null value and than add 
        if(!SqlReader.IsDBNull(column))
             list.Add(reader.GetInt32(column));
    }

    return list;
}

答案 3 :(得分:2)

ExecuteScalar方法返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

如果您想要一个项目列表,您应该使用ExecuteReader并通过阅读器循环并阅读所需的值

List<int> items=new List<int>();
using (IDataReader reader = db.ExecuteReader(dbCommand))
{
      while (reader.Read())
      {
         items.Add(reader.GetInt32(reader.GetOrdinal("YourColumnName"));
      }
}