Kasar_7 Ответов: 1

Как исправить исключение outofrange / не удается найти столбец 1. в MVC


Я пытаюсь вызвать xml-данные в представлении MVC, чтобы отобразить их, но получаю ошибку исключения. Любая помощь будет очень признательна.

Что я уже пробовал:

--------XML----
<root>
    <states>
        <state>
            <statename>Abia</statename>
            <stateid>101</stateid>
        </state> 
        <state>
            <statename>Adamawa</statename>
            <stateid>102</stateid>
        </state> 
        <state>
            <statename>Akwa Ibom</statename>
            <stateid>103</stateid>
        </state> 
        ...
    </states>
</root>


-----Код C# ---
public class XMLREADER
{
    public List<Products> ReturnListOfProducts()
    {
        string xmlData = HttpContext.Current.Server.MapPath("~/App_Data/ProductData.xml");//Path of the xml script  
        DataSet ds = new DataSet();//Using dataset to read xml file  
        ds.ReadXml(xmlData);
        
        var products = new List<Products>();
        products = (from rows in ds.Tables[0].AsEnumerable()
                    select new Products
                    {       
                        StateName = rows[0].ToString(),
                        StateId = Convert.ToInt32(rows[1].ToString()),
                    }).ToList();
        
        return products;
    }
}

njammy

Какая строка вызывает исключение?

Kasar_7

выбор новых продуктов
{

StateName = строки[0].Метод toString(),
StateId = Преобразовать.ToInt32 (строки[1].Метод toString()),
}).Список();
возвращенное изделие;
Эти строки, так как я не могу найти строки/данные из xml.
я считаю, что это может быть корневая проблема xml.
<--root1-->
<--состояния-- & gt;
<--состояние-->
<--statename-- & gt;abc<--/statename--><--stateid--> 1<-- / stateid-->
<-- / state-->
<-- / состояния-->

PS: Я просто ставлю здесь <-- & gt; Так как без этого корневой тег не будет отображаться

njammy

Когда вы отлаживаете до линии
ds. ReadXml(xmlData);
Как выглядит набор данных? (сколько таблиц, строк и т. д.)

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Karthik_Mahalingam

проверьте количество строк перед использованием.

1 Ответов

Рейтинг:
12

Richard Deeming

Отлаживать свой код и проверить DataSet Вы увидите, что в первой таблице есть только один столбец - states_Id Данные, которые вы пытаетесь прочитать, находятся в второй стол.

public List<Products> ReturnListOfProducts()
{
    string xmlData = HttpContext.Current.Server.MapPath("~/App_Data/ProductData.xml");
    DataSet ds = new DataSet();
    ds.ReadXml(xmlData);
    
    return (from rows in ds.Tables[1].AsEnumerable()
            select new Products
            {       
                StateName = rows[0].ToString(),
                StateId = Convert.ToInt32(rows[1]),
            }).ToList();
}

Вы могли бы выяснить это для себя гораздо быстрее, используя отладчик.