簡體   English   中英

我可以使用變量在ASP.Net c#中用多個值填充xml嗎?

[英]Can I use variable to fill xml with multiple values in ASP.Net c#?

大家好,我正在嘗試使用SQL Server數據庫中的值創建和保存XML。

我的代碼基本上創建了一個XML字符串,其中填充了我從多個SQL查詢中獲得的變量(我需要從許多表中獲取數據以完成XML)

我正在使用SqlDataReader來獲取變量的值。

由於我的XML很長而且很復雜,因此我決定根據查詢從幾個子字符串中放入最終的XML字符串,基本上像這樣:

finalxml string = startxml + headerxml + buyerxml + sellerxml + linesxml + summaryxml

直到到達某個點,SQL查詢返回的結果不止一行,我還是一切都好。

這是我的代碼背后:

string orderdetails = "select ProductId, Quantity from [Order] inner join OrderItem on [Order].Id=OrderItem.OrderId where OrderId='" + orderID + "'";
SqlCommand com3 = new SqlCommand(orderdetails, dbConn);

dbConn.Open();

using (SqlDataReader orderitem = com3.ExecuteReader())
    while (orderitem.Read())
    {
            string orderxml = "<Order>" + "<OrderItem>" + orderitem.GetInt32(0).ToString() + "</OrderItem>" + "<OrderItem>" + orderitem.GetInt32(1).ToString() + "</OrderItem>" + "</Order>";
            Label20.Text = orderxml;
            string termid = orderitem.GetInt32(0).ToString();
            string termmenny = orderitem.GetInt32(1).ToString();
    }

    dbConn.Close();
}

protected void Button1_Click(object sender, EventArgs e)
{
    string headerxml = "<Order-Header>" +
                            "<DocumentType> számla </DocumentType>" +
                            "<OrderNumber>" + rendSz + "</OrderNumber>" +   
                            "<OrderDate>"+ datum +"</OrderDate>" +   
                            "<ExpectedDeliverydate> " + szallido + "</ExpectedDeliverydate>"+
                            "<PaymentMethod>"+ fizmod +"</PaymentMethod>"+
                            "<Remarks><![CDATA[" + txtFirstName.Text + "]]></Remarks>"+
                            "<Note><![CDATA[" + txtLastName + "]]></Note>" +   
                            "<PreviousOrderNumber><![CDATA[]]></PreviousOrderNumber>" +
                        "</Order-Header>";
    string vevoxml = "<Buyer>" +
                                "<ILN>435</ILN>" +
                                    "<Name>"+ vezeteknev +" "+ keresztnev +"</Name>" +
                                    "<City>" + vevovaros + "</City>" +
                                    "<ZIP>" + irszam + "</ZIP>" +
                                    "<Address>" + vevocim1 + vevocim2 + "</Address>" +
                                    "<E-mail>" + vevoemail +  "</E-mail>" +
                                    "<Telefon>" + vevotel + "</Telefon>" +
                                    "<Contact>" + "nincs" + "</Contact>" +
                                    "<DeliveryName>" + szallkeresztnev +" "+ szallvezeteknev + "</DeliveryName>" +
                                    "<DeliveryCity>" + szallcimvaros + "</DeliveryCity>" +
                                    "<DeliveryZIP>" + szallcimirszam + "</DeliveryZIP>" +
                                    "<DeliveryAddress>" + szallvevocim1 + szallvevocim2 + "</DeliveryAddress>" +
                                "</Buyer>";

    string eladoxml = "<Seller>" +
                                    "<ILN />" +
                                    "<Name>E-Szoftver Kft.</Name>" +
                                    "<City>Budapest</City>" +
                                    "<ZIP>1195</ZIP>" +
                                    "<Address>Ady Endre út 97-99. F/04.</Address>" +
                                    "<E-mail>laszlo@marsalsoft.hu</E-mail>" +
                                "</Seller>";

    string linexml = "<Line>" +
                               "<Line-Item>" +
                                    "<LineNumber>1</LineNumber>" +
                                    "<EAN />" +
                                    "<SupplierItemCode />" +
                                    "<CustomsCode>5829</CustomsCode>" +
                                    "<ItemDescription><![CDATA[E-Számla szoftver frissítési és jogkövetési díj 1 évre]]></ItemDescription>" +
                                    "<ItemNote><![CDATA[]]></ItemNote>" +
                                    "<VATType>27</VATType>" +
                                    "<PackageType>CU</PackageType>" +
                                    "<OrderedQuantity>1</OrderedQuantity>" +
                                    "<UnitOfMeasure>év</UnitOfMeasure>" +
                            "<OrderedUnitNetPrice>13200</OrderedUnitNetPrice>" +
                                "</Line-Item>" +
                                "</Line>"; 


    string strMyXml = "<?xml version=\"1.0\" encoding=\"windows-1250\"?> " +
                      "<Document-Order>"+
                        headerxml +

                            "<Order-Parties>" +
                                vevoxml +
                                eladoxml +
                            "</Order-Parties>"+
                            "<Order-Lines>" +
                                linexml +
                            "</Order-Lines>" +
                            "<Order-Summary>" +
                                "<TotalLines>1</TotalLines>" +
                                "<TotalOrderedAmount>1</TotalOrderedAmount>" +
                                "<TotalNetPrice>13200</TotalNetPrice>" +
                                "<TotalVat>3564</TotalVat>" +
                                "<TotalGross>16764</TotalGross>" +
                            "</Order-Summary>" +
                     "</Document-Order>";

    XmlDocument xDoc = new XmlDocument();
    xDoc.LoadXml(strMyXml);

    xDoc.Save(Server.MapPath("//orders//szamla.xml"));
}

現在, lineXML部分是我的問題,它描述了訂單中包含的產品。 每個xml描述1個訂單,但是1個訂單可以包含3個產品,在這種情況下,我需要為每個產品創建一行,其中包含以下幾個元素:數量,數量,凈價,總價。

是否可以將SqlDataReader和變量添加到字符串中,還是我需要使用其他方式,例如從查詢結果生成的數據集?

我發現了很多有關從數據集生成xml以及使用字符串生成xml的信息,但是它們都不包含有關這種特殊情況的信息,即從需要使用多個查詢的SQL Server生成XML。

幸運的是,我的代碼是模塊化的,因此,如果只能使用數據集完成代碼,則無需希望接觸XML的其他部分。 任何幫助,將不勝感激。

同時,我找到了解決方案,對於xml的orderdetails部分,我使用了數據集,而不是將其寫入文件,而是將其轉換為字符串,並將其添加到主要的xmlstring中:

 string orderdetails = "select Rank() OVER (Order by ProductID) as LineNumber, null as EAN, null as CustomsCode, ProductId as SupplierItemCode, '![CDATA['+Product.Name+']' as ItemDescription, '![CDATA['+Product.ShortDescription+']' as ItemNote, null as VATType, 'CU' as PackageType, Quantity as OrderQuantity, 'darab' as UnitOfMeasure, UnitPriceExclTax as OrderedUnitNetPrice from [Order] inner join OrderItem on [Order].Id=OrderItem.OrderId Inner join Product on OrderItem.ProductId=Product.Id where OrderId='" + orderID + "'";
    SqlCommand com3 = new SqlCommand(orderdetails, dbConn);

    dbConn.Open();

    SqlDataAdapter adapter;
    DataSet ds = new DataSet("Line");

            try
            {

                adapter = new SqlDataAdapter(orderdetails, dbConn);
                adapter.Fill(ds, "Line-Item");
                dbConn.Close();
                StringWriter sw = new StringWriter();
                string result = sw.ToString();

                ds.WriteXml(sw);
                ds.WriteXml(@"E:\mypath\Product.xml");  //saved to file as well just to check the correct scheme
                teststring = sw.ToString();
                prodlabel.Text = teststring;

            }
            catch (Exception ex)
            {
                Label20.Text = ex.ToString();

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM