【问题标题】:DataTable.Rows.IndexOf throws System.IndexOutOfRangeException C#DataTable.Rows.IndexOf 抛出 System.IndexOutOfRangeException C#
【发布时间】:2017-09-28 18:45:17
【问题描述】:

我有一个DataTable,叫做table。我需要找到存储在table 中的DataRow 的索引。

DataRow[] user = table.Select("Username = '" + username + "'");
table.Rows.IndexOf(user[0]);

第一行工作正常。我知道它返回一个有效的DataRow,因为我在其他地方使用了DataRow。但是,当我运行table.Rows.IndexOf(user[0]); 时,它会抛出System.IndexOutOfRangeException,说“索引超出了数组的范围”。我不明白为什么这会引发异常。有人有什么想法吗?

【问题讨论】:

  • 在你的表中你有一个字段是“用户名 = xxxxxx”吗?这就是它正在寻找的东西。
  • 有一列叫Username。
  • 当您将鼠标悬停在用户上时,在第一行,您能看到 {System.Data.DataRow[1]} 吗?我通过创建一个虚拟表并添加一行来运行您的代码。它毫无例外地工作。
  • 我认为是user[0] 引发了异常。您的查询不得返回任何结果
  • @JFT 它显示 {System.Data.DataRow[0]}。

标签: c# sql datatable indexof


【解决方案1】:

@ServerS 问题是您没有从第一行收到任何行,计数为 0。您可能需要在执行 user[0] 之前检查计数。下面是给你的示例代码。我试过了,效果很好。

        DataTable table = new DataTable();
        table.Clear();
        table.Columns.Add("Username");
        table.Columns.Add("Marks");

        DataRow dataRow = table.NewRow();
        dataRow["Username"] = "xyz";
        dataRow["Marks"] = "500";
        table.Rows.Add(dataRow);
        var username = "xyz";

        DataRow[] user = table.Select("Username = '" + username + "'");
        if(user.Length > 0 )
        table.Rows.IndexOf(user[0]);

【讨论】:

  • @Rufus L 我添加了一些评论。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多