在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 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"));
}
先谢谢你
你要走了 .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
这里是另一种方法。
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>