如何将 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;
}
}
}
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)中的存在。