尝试访问数据集时发生System.IndexOutOfRangeException

时间:2014-12-23 14:48:20

标签: c# asp.net .net

我正在尝试从以下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();

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

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

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

您的XML正在为您提供您不期望的内容。它创建了两个表。一个叫做“NewDataSet”,另一个叫做“Table”。您将在另一个表中找到您的行(表[1])。因此,修复数据集xml或使用我上面给出的代码。

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

答案 1 :(得分:0)

如@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

要在调试器中检查数据集,请按照屏幕截图

enter image description here

enter image description here