C #: «Таблица« sometable »не может быть дочерней таблицей для себя во вложенных отношениях». - PullRequest
1 голос
/ 24 марта 2009
public string GetArtistThumbnail(string artistName)
{
    var request =
        WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=" + artistName +
        "&api_key=" +
         APIKey) as HttpWebRequest;

    using (var response = request.GetResponse() as HttpWebResponse)
    {
        var ds = new DataSet();
        ds.ReadXml(response.GetResponseStream()); // <-- Exception is thrown here
    }

    return "";   
}

Приведенный выше метод в основном извлекает файл XML из одной из Служб API LastFM .

Теперь я сталкиваюсь со следующим исключением при заполнении набора данных из xml методом ReadXml:

The table (artist) cannot be the child table to itself in nested relations.


Вот пример файла XML, который извлекается

Обратите внимание, что в файле XML есть вложенный Artist, и я, очевидно, предполагаю, что это является причиной исключения.


Мой вопрос, как я могу предотвратить это? по вложенным таблицам

Ответы [ 3 ]

3 голосов
/ 24 марта 2009

Насколько я знаю, DataSets не предназначен для хранения любого типа XML. Вам действительно нужен набор данных в этом случае?

Я предлагаю переключиться на linq 2 xml или XmlDocument, чтобы манипулировать результатами веб-службы.

1 голос
/ 24 марта 2009

Я думаю, что ответ Фредди имеет смысл, но вы можете определить схему DataSet вручную перед вызовом ReadXml вместо того, чтобы полагаться на xml для определения схемы.

Можно также попытаться отделить ReadXml от GetResponse и выполнить xslt до вызова ReadXml, т. Е. Сделать схему совместимой с DataSet.

Длинный выстрел ... отключить DataSet.EnforceConstraints

0 голосов
/ 25 октября 2009

попробуйте использовать http://ws.audioscrobbler.com/2.0/artist/iron+maiden/info.xml формат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...