System.Data.DuplicateNameException

0

Witam, piszę sobie taki prosty czytnik rss i natrafiłem na problem. Otóż poniższy kod się kompiluje, wszystkie zmienne przy debugowaniu się zgadzają ale w czasie działania prgramu wywala mi:

An unhandled exception of type 'System.Data.DuplicateNameException' occurred in System.Data.dll

w tej linijce:

plik.ReadXml(kanaly[comboBoxKanal.SelectedIndex].link);

Tutaj daję kod całej metody, wywołuje się ona podczas wybrania innego elementu w comboBox:

private void comboBoxKanal_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataSet plik = new DataSet();
            DataTable tabela = new DataTable();
            plik.ReadXml(kanaly[comboBoxKanal.SelectedIndex].link); //tu wywala exception
            tabela = plik.Tables["item"];
            
            listBoxNaglowki.Items.Clear();
            tresci.Clear();
            linki.Clear();

            for (int i = 0; i < tabela.Rows.Count; i++)
            {
                listBoxNaglowki.Items.Add(tabela.Rows[i]["title"].ToString());
                tresci.Add(tabela.Rows[i]["description"].ToString());
                linki.Add(tabela.Rows[i]["link"].ToString());
            }
        }

Co ciekawe błąd pojawia się tylko przy comboBoxKanal.SelectedItem == 0;
Jakieś pomysły o co chodzi? :-/


1

plik.ReadXml(kanaly[comboBoxKanal.SelectedIndex].link);

Rozbij to na kilka linijek, bo ciężko się domyślić co konkretnie powoduje exception :D Masz 4 instrukcje w jednej linijce. I co to są te kanaly[]? Raczej trudno będzie zgadywać :] Daj co więcej informacji.

A co do samego wyjątku - DuplucateNameException znaczy "Wyjątek wielokrotnie powtórzonego imienia", czyli błąd jest z tym związany ;) Ty sam najlepiej znasz swój kod więc może ci się uda coś wymyślić bez naszej pomocy.

0

System.Data.DuplicateNameException: Represents the exception that is thrown when a duplicate database object name is encountered during an add operation in a -related object.
@msm: Tylko metoda ReadXml może wyrzucić taki wyjątek. Masz coś źle w pliku Xml, który próbujesz wczytać. Zobacz dwa poniższe linki:
[1] FIX: Cannot derive and extend a column in XSD with DataSet
[2] RSS, ReadXml() and Namespaces

0

kanaly:

List<kanal> kanaly = new List<kanal>();

a kanal to po prostu klasa ktora przechowuje dwa stringi: nazwaKanalu i link.
Plik który próbuje wczytać to kanał rss z gazeta.pl :) jeżeli napisze funkcje wczytującą w ten sposób to wszystko jest ok:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(kanaly[comboBoxKanal.SelectedIndex].link);
XmlNodeList lista = xmlDoc.GetElementsByTagName("item");

comboBoxKanal.SelectedIndex w momencie gdy wywala błąd ma wartość 0 (sprawdzone przez debugger), a kanaly[0].link == "http://rss.gazeta.pl/pub/rss/wiadomosci.xml"
Nie mam pojęcia co jest nie tak :/
Edit: może za słabo znam angielski ale nie do końca rozumiem to zdanie:
To avoid this exception, define a new element type with the attributes that you want, instead of deriving from and extending an existing element type.
Czy to znaczy, że musze edytować plik xml? Tego nie mogę zrobić musi być inne wyjście :-/

1

Masz kompletną dokumentację - oczywiście po angielsku :>
http://support.microsoft.com/kb/316820
Artykuł jest też w wersjach chińskiej (tradycyjny i okrojony) oraz arabskiej, ale po polsku nie ma :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1