【问题标题】:System.IndexOutOfRangeException occurs when try to access dataset尝试访问数据集时发生 System.IndexOutOfRangeException
【发布时间】:2014-12-23 14:48:20
【问题描述】:

我正在尝试从以下 xml 文件中获取货币代码。但我得到一个名为 IndexOutOfRange 的异常。

<string xmlns="http://www.webserviceX.NET">
<NewDataSet> 
<Table> 
    <Name>India</Name> 
    <CountryCode>in</CountryCode> 
    <Currency>Rupee</Currency> 
    <CurrencyCode>INR</CurrencyCode> 
</Table> 
<Table> 
    <Name>India</Name> 
    <CountryCode>in</CountryCode> 
    <Currency>Rupee</Currency> 
    <CurrencyCode>INR</CurrencyCode>
</Table> 
</NewDataSet>
</string>

这是我的代码,

string firstCurrency = countryService.GetCurrencyByCountry(this.DropDownList1.SelectedIndex.ToString());
DataSet dataset = new DataSet();
dataset.ReadXml(new XmlTextReader(new StringReader(firstCurrency)));
String currency = dataset.Tables[0].Rows[0][2].ToString();
String currencyCode = dataset.Tables[0].Rows[0][3].ToString();
currencyLabel.Text = currency;
currencyCodeLabel.Text = currencyCode;

错误发生在下面一行,

String currency = dataset.Tables[0].Rows[0][2].ToString();

我尝试了几个小时,但找不到解决方案。

【问题讨论】:

  • 用调试器查看你的数据集。它不应该需要几个小时。我想知道人们是如何在不知道如何使用它的情况下走到现在的......
  • 那么您是否检查过一个表,它第一行,并且该行有3列?您在一条语句中执行了三个索引操作 - 您是否尝试找出其中哪些失败了?
  • 我建议进入你的代码并在抛出错误的行设置一个断点并使用调试器来探索你的数据集对象。
  • 我猜你的第一行 (GetCurrencyByCountry) 实际上并没有返回你期望的字符串。

标签: c# asp.net .net


【解决方案1】:

正如@buthla 所述,它没有提供所需的 XML。

为了获得预期的 xml,您应该将 xml 更新为:

<string xmlns="http://www.webserviceX.NET">
<Table> 
    <Name>India</Name> 
    <CountryCode>in</CountryCode> 
    <Currency>Rupee</Currency> 
    <CurrencyCode>INR</CurrencyCode> 
</Table> 
<Table> 
    <Name>India</Name> 
    <CountryCode>in</CountryCode> 
    <Currency>Rupee</Currency> 
    <CurrencyCode>INR</CurrencyCode>
</Table> 
</string>

您可能还想看看this post

要在调试器中检查您的数据集,请按照屏幕截图进行操作

【讨论】:

  • 谢谢!我无法编辑 XML,因为它是 Web 服务。但是我发现xml文件有问题。
  • @Isuru 欢迎您,请查看答案中的屏幕截图以在调试器可视化工具中查看数据集
  • 谢谢!我会照你说的做。
【解决方案2】:

你可以试试这个:

String currency = dataset.Tables["Table"].Rows[0][2].ToString()

您的 XML 提供了您意想不到的东西。它创建了两个表。一个称为“NewDataSet”,另一个称为“Table”。您将在其他表 (Tables[1]) 中找到您的行。所以,修复你的数据集 xml 或使用我上面给你的代码。

顺便说一句,从数据表中获取值时,我绝不会建议这种方法。至少在通过索引访问它们之前检查值是否为空。

【讨论】:

  • 奇怪。我使用了您在原始问题中发布的确切 XML,创建了测试应用程序,加载了 xml isde 数据集,并且使用上面的代码行,我毫无问题地访问了该值。如果您的 XML 与您最初发布的不同,那么您将必须检查空值,正如我在原始答案中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2023-01-19
  • 2016-07-24
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多