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

标签 c# .net ms-access oledb oledbdatareader

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

我的代码是这样的:

 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/

相关文章:

c# - 验证模板中隐藏的 AdornedElementPlaceholder

c# - 有没有办法先重定向页面然后执行剩余的代码

c# - 如何取消在 C# Winforms 应用程序中执行长时间运行的异步任务

c# - ASP.NET MVC 传递 DateTime 来查看

vba - 打开 .rtf 附件并粘贴当前电子邮件正文中的内容

c# - VB.NET 中 float[] 的等效数据类型是什么?

c# - C# Regex 的多个正则表达式选项

.net - 如何跨多个 Visual Studio 项目实现每个项目的 appSettings 和全局 appSettings?

vba - Access 报告: Wrap Text Not Working

forms - 组合框和下拉大小