Итерация для l oop, но получение только одного результата - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь перебрать каждый элемент в PcsInItem , получить Цена для каждого и вставить их в таблицу SQL. Ниже моя XML структура.

        <Message>
            <Body>
                <Item Id="8683297523">
                    <PcsInItem>
                        <Pcs Price="20" PcsId="12829"></Pcs>
                        <Pcs Price="50" PcsId="64838"></Pcs>
                        <Pcs Price="80" PcsId="43829"></Pcs>
                    </PcsInItem>
                </Item>
            </Body>
        </Message>

Когда я запускаю код, он вставляет только первый элемент в SQL. Я не мог понять, почему он не выполняет итерации других элементов, а только получает первый.

Это мой код:

var xdoc = XDocument.Parse(soapResult);
var y = xdoc.Descendants("Body").Descendants("PcsInItem");

var a = xdoc.Descendants("Body");
XElement b = a.Elements("Item").Last();
var ItemId = b.Attributes("Id").FirstOrDefault().Value;

SqlConnection conn;
string constring = @"...";
string query = "INSERT INTO..";

using (conn = new SqlConnection(constring))
{
    foreach (XElement x in y)
    {
        var Price = x.Element("Pcs").Attribute("Price")?.Value;
        var PcsId = x.Element("Pcs").Attribute("PcsId")?.Value;
        using (var cmd = new SqlCommand(query, conn))
        {
            try
            {
                conn.Open();
                cmd.Parameters.AddWithValue("@Price", Price);
                cmd.Parameters.AddWithValue("@PcsId", PcsId);
                cmd.Parameters.AddWithValue("@ItemId", ItemId);
                komut2.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }
}

Любая идея, почему я только получаю первым предмет в моей таблице SQL? Должно быть 3 разных записи таблицы, и все эти три записи имеют один и тот же ItemId, но разные Price и PcsId.

...