数据未保存在xml文件中

问题描述 投票:0回答:1

在ASP.NET MVC中,我有这样的代码:我想把datareader中的数据保存在xml文件中,我使用了下面的代码,但我在文件中只有两行。

<?xml version="1.0" encoding="utf-8"?>
<Centre_Commercial />

我的代码在控制器。

XDocument document = new XDocument(new XDeclaration("1.0", "utf-8", null));
XElement nodecentre = new XElement("Centre_Commercial");
document.Add(nodecentre);

while (dr.Read())
{
    nodecentre.Add(new XElement("Num_Centre", Convert.ToInt32(dr[0].ToString())));
    nodecentre.Add(new XElement("Num_Centre", dr[1].ToString()));
    nodecentre.Add(new XElement("Num_Centre", Convert.ToDateTime(dr[2].ToString()).Date));
    nodecentre.Add(new XElement("Num_Centre", int.Parse(dr[3].ToString())));
    nodecentre.Add(new XElement("Num_Centre", int.Parse(dr[4].ToString())));
    nodecentre.Add(new XElement("Num_Centre", Convert.ToDateTime(dr[5].ToString())));
    nodecentre.Add(new XElement("Num_Centre", dr[6].ToString()));
    nodecentre.Add(new XElement("Num_Centre", dr[7].ToString()));
    nodecentre.Add(new XElement("Num_Centre", int.Parse(dr[8].ToString())));

    document.Save(Server.MapPath(@"~/App_Data/test.Xml"));
}

con.Close();

先谢谢你

xml asp.net-mvc linq-to-xml
1个回答
0
投票

我总是返回两行.但我在文件中只有两行:&...。

<?xml version="1.0" encoding="utf-8"?>
<Centre_Commercial />

更新我的代码在下面。

using (SqlConnection con = new SqlConnection("Server=DESKTOP-DEOG0BL\\SQLEXPRESS;database=db_WCS;integrated security=yes"))
        {   SqlCommand cmd = new SqlCommand("spBudget", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@budget1",b1);
            cmd.Parameters.AddWithValue("@budget2",b2);
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            Response.Write(float.Parse(Request["budget1"].ToString()));

            XDocument document = new XDocument(new XDeclaration("1.0", "utf-8", null));
            XElement nodecentre = new XElement("Centre_Commercial");
            document.Add(nodecentre);
            while (dr.Read())
            {
                nodecentre.Add(new XElement("Num_Centre", Convert.ToInt32(dr[0].ToString())));
                nodecentre.Add(new XElement("Nom_Centre", dr[1].ToString()));
                nodecentre.Add(new XElement("Date_debut_realisation", Convert.ToDateTime(dr[2].ToString()).Date));
                nodecentre.Add(new XElement("budget", int.Parse(dr[3].ToString())));
                nodecentre.Add(new XElement("Duree_realisation", int.Parse(dr[4].ToString())));
                nodecentre.Add(new XElement("Date_lancement", Convert.ToDateTime(dr[5].ToString())));
                nodecentre.Add(new XElement("adresse", dr[6].ToString()));
                nodecentre.Add(new XElement("ville", dr[7].ToString()));
                nodecentre.Add(new XElement("Nombre_etage", int.Parse(dr[8].ToString())));
             }
            con.Close();
            document.Save(Server.MapPath(@"~/App_Data/test.Xml"));

        }

先谢谢你


0
投票

你要走了 .Save(...) 方法调用出循环。

c#

}
con.Close();
document.Save(Server.MapPath(@"~/App_Data/test.Xml"));

SQL

很可能您需要添加 SET NOCOUNT ON; 作为存储过程的第一行。

create procedure spBudget
(
    @budget1 int,
    @budget2 int
) as 
begin 
    SET NOCOUNT ON;
    select * from Centre_Commercial where budget between @b and @b;
end

0
投票

这里是另一种方法。

MS SQL Server会根据所需的输出生成XML。它是一个常规的 SELECT ... 额外的声明 FOR XML 子句。我使用的是动态SQL,因为我没有你的数据库,我也不知道你想要的输出XML。

(1) 你只需要稍微修改一下 SqlCommand 变量来容纳你的带参数的存储过程。(2)你的存储过程需要在其中添加 FOR XML 子句。

c#

void Main()
{
    const string FILENAME = @"e:\temp\file2.xml";

    using (SqlConnection con = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SPACESHIP"))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT TOP(2) * FROM dbo.authors FOR XML PATH('r'), TYPE, ROOT('root')";
        con.Open();

        using (XmlReader reader = cmd.ExecuteXmlReader())
        {
            XDocument xdoc = XDocument.Load(reader);

            var settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.OmitXmlDeclaration = false;
            settings.IndentChars = "\t";
            // to remove BOM
            settings.Encoding = new UTF8Encoding(false);

            using (var writer = XmlWriter.Create(FILENAME, settings))
            {
                xdoc.Save(writer);
            }
        }
        Console.WriteLine("File '{0}' has been created.", FILENAME);
    }
}

输出XML文件

<?xml version="1.0" encoding="utf-8"?>
<root>
   <r>
      <au_id>172-32-1176</au_id>
      <au_lname>White</au_lname>
      <au_fname>Johnson</au_fname>
      <phone>408 496-7223</phone>
      <address>10932 Bigge Rd.</address>
      <city>Menlo Park</city>
      <state>CA</state>
      <zip>94025</zip>
      <contract>1</contract>
   </r>
   <r>
      <au_id>213-46-8915</au_id>
      <au_lname>Green</au_lname>
      <au_fname>Marjorie</au_fname>
      <phone>415 986-7020</phone>
      <address>309 63rd St. #411</address>
      <city>Oakland</city>
      <state>CA</state>
      <zip>94618</zip>
      <contract>1</contract>
   </r>
</root>
© www.soinside.com 2019 - 2024. All rights reserved.