如何将 DataReader 中的值放入 List

本文关键字:List DataReader | 更新日期: 2023-09-27 17:56:53

可能的重复项:
如何轻松地将 DataReader 转换为 List

我想将来自数据读取器对象的数据放在通用列表中。我已经这样做了,但它不起作用...

我在每行中收到投射异常错误!

 SqlDataReader pointreader = cmd2.ExecuteReader();
 var pointt = new List<int>();
 while (pointreader.Read())
 {
     foreach (int item in pointreader)
     {
        pointt.Add(item);
         if (pointt.Contains(point))
         {
             matchpoint = item;
         }
     }
 }

如何将 DataReader 中的值放入 List<T>

SqlDataReader 无法以您描述的方式访问,因为它没有实现 IEnumerable。相反,您需要单独访问每个字段:

SqlDataReader puanoku = cmd2.ExecuteReader();
List<int> puann = new List<int>();
while (puanoku.Read())
{
    for (int i = 0; i < puanoku.FieldCount; i++)
    {
        if (puanoku.GetFieldType(i) == typeof(int))
        {
            // Do something here
        }
    }
}

如果您只选择了一列并确定它是 int,那么您可以像这样简化代码:

SqlDataReader puanoku = cmd2.ExecuteReader();
List<int> puann = new List<int>();
while (puanoku.Read())
{
    int value = puanoku.GetInt32(1);
    // Do something with the int here...
}

这篇文章可能会有一些用处。

我认为您需要从阅读器中获取项目,例如puanoku["item"]并将其转换为int。 添加然后只有您可以将其添加到列表中。

while(Reader.Read())
{
  var myId = (int)Reader["myId"];
  myIdList.Add(myId); // or you can do myIdList.Add(int)Reader["myId"]);
}

数据读取器是指向表中行的指针。可以使用读取器上的索引器访问各个属性,并使用 FieldCount 属性获取值。

 while (puanoku.Read())
 {
  for(int i = 0; i < puanoku.FieldCount)
  {
      puann.Add(puanoku.GetInt32(i));
  }
 }

如果你只想要唯一值,你应该使用HashSet而不是List,因为它将测试O(1)而不是O(n)中的存在。

相关文章: