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

Psy*_*sis 2 .net c# ado.net

可能重复:
如何轻松地将DataReader转换为List <T>?

我想将来自datareader对象的数据放在通用列表中.我这样做了但是它不起作用......

我在foreach行中得到强制转换异常错误!

 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;
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 8

无法以您描述的方式访问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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只选择了一列并确定它是一个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...
}
Run Code Online (Sandbox Code Playgroud)

这篇文章可能有一些用处.