gpt4 book ai didi

c# - 从 Access 数据库读取字段时出现 IndexOutOfRangeException

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:01 26 4
gpt4 key购买 nike

我在将值从 Access 数据库读入列表时遇到问题。这些值如下所示:字段称为 EventDistance值(value)观是77777777551124546

我的代码是这样的:

 private void StartSchedule_Click(object sender, EventArgs e)
{
string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\A2 Computing\C# Programming Project\TriHard.accdb";
string SelectQuery = "SELECT Time.AthleteID, Athlete.AthleteName,
Time.EventTime, Event.EventDistance
FROM Event INNER JOIN
(Athlete INNER JOIN [Time]
ON Athlete.[AthleteID] = Time[AthleteID])
ON Event.[EventID] = Time.[EventID];";

OleDbConnection Connection = new OleDbConnection(ConnectionString);
OleDbCommand Command = new OleDbCommand(SelectQuery, Connection);
Command.Connection.Open();
OleDbDataReader Reader = Command.ExecuteReader(CommandBehavior.CloseConnection);

PaceCalculator pace = new PaceCalculator();
List<PaceCalculator> Distancelist = new List<PaceCalculator>();
while (Reader.Read())
{
pace.Distance = (int)Reader["Event.EventDistance"];
Distancelist.Add(pace);
}

它抛出的 IndexOutOfRanceException 没有为 Event.EventDistance 处理。读入的整数只有8个,但我的数据一定要有扩展空间。我该如何做到它只读入整数而不引发索引错误?

最佳答案

如果您查看 source code of the OleDbDataReader for the indexer获取一个字符串作为输入参数,然后按照代码进行操作,您会注意到在可用字段名称之间搜索传递给索引器的字符串,如果未找到,则会抛出 IndexOutOfRange 异常。

在您的查询中,没有名为"Event.EventDistance" 的字段。
有一个名为 EventDistance 的字段(表名应该从 Reader 索引器中删除。

但是您还有另一个问题,您的循环将相同的 PaceCalculator 实例重复添加到列表中。
因此,在每个循环中,您将 EventDistance 设置为相同的 PaceCalculator 实例,并一次又一次地将其添加到列表中。在循环结束时,列表中充满了指向同一个 PaceCalculator 实例的元素,并且该实例具有读取的最后一条记录的值。

您可以通过在循环内移动实例的创建来解决这个问题

   List<PaceCalculator> Distancelist = new List<PaceCalculator>();
while (Reader.Read())
{
PaceCalculator pace = new PaceCalculator();
pace.Distance = (int)Reader["EventDistance"];
Distancelist.Add(pace);
}

关于c# - 从 Access 数据库读取字段时出现 IndexOutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com