把多次的查询结果保存到一个XML文件里

liuxiuming 2010-01-26 01:31:26
//循环体
.................
.................
.................
SqlDataAdapter da = new SqlDataAdapter(select, connection);
DataSet ds = new DataSet();
da.Fill(ds, "stockup");
ds.WriteXml("write7.xml", XmlWriteMode.WriteSchema);
//循环结束

在循环体中执行的是SQL查询
我想把每次的查询结果都保存到write7.xml中,但是现在只能把最后一次的查询结果保存下来,前面的查询结果都被覆盖了,请大侠们帮忙解答。
...全文
423 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxiuming 2010-01-26
  • 打赏
  • 举报
回复
感谢楼上提供的方法,我试了,不行的,和原来的结果一样。
wxm3630478 2010-01-26
  • 打赏
  • 举报
回复
我想到一个方法,不知道是否可行,DataSet 里面存的是DataTable

循环一次,你把DataSet中的DataTable存到另外一个新DataSet中去,循环一次写一次,等循环结束时

在ds.WriteXml()方法

不知道ds.WriteXml() 是否支持DataSet包含多个DataTable的.....//自己去测试下
wxm3630478 2010-01-26
  • 打赏
  • 举报
回复
ds.WriteXml() 每个DataSet对象用这个方法 都会产生一个xml文件 只是你用了同一个文件名write7.xml

所以后一次就替换了前一次的

1.要么循环的时候就改掉文件名,用多个xml文件来存储

2.多个DataSet写入一个xml,如果没提供什么直接的方法,那就循环的来 一条一条的写.....

转来转去 还是要用到1、往 <bookstore>节点中插入一个 <book>节点:
Eleve 2010-01-26
  • 打赏
  • 举报
回复
不能使用原来的思路了,你可以把每次生成的结果放在一个新增的节点中,每查询一次,将生成一个新的节点,再将查询到的结果插入这个节点中就好了啊
liuxiuming 2010-01-26
  • 打赏
  • 举报
回复
12楼你不2你回答一下好了,回答不上来还嘲笑别人说明你们全家都2
liuxiuming 2010-01-26
  • 打赏
  • 举报
回复
11楼,循环中每次查询出来的结果都是一个结果集,并不是例子中的需要指定每一个结点的内容,那样的话我也指定不过来,我现在是想把每次的查询结果都保存到一个XML里。
Aslangg 2010-01-26
  • 打赏
  • 举报
回复
楼主你敢再2点不
wxm3630478 2010-01-26
  • 打赏
  • 举报
回复
别人给你贴出来了,还说别人答非所问.....

我觉得这个就是你要的:1、往<bookstore>节点中插入一个<book>节点:

自己好好看一下.......
<sqlcoll>
<sql>....</sql>
<sql>....</sql>
<sql>....</sql>
</sqlcoll>

每次只要添加一个sql节点就可以了......
bestdowt1314 2010-01-26
  • 打赏
  • 举报
回复
只有第一次创建XML文档,以后的都不创建文档,只创建节点。最后就是一个完整的文档呀。
ztenv 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liuxiuming 的回复:]
在循环体中每一次查询出来的结果就是存储过程查询出来的结果集,和楼上说的不一样,例子我也看过,好像是从网上搜来的
[/Quote]

是从网上搜来的,的确有点答非所问,对不起!
redfoxhuang 2010-01-26
  • 打赏
  • 举报
回复
别人已经说得很清楚了,你需要做得只是首先把xml读成xmldocument然后用xml读写类来加入节点,然后再写文件就是了...
你要完全抛弃用dataset.WriteXml()的思路...
liuxiuming 2010-01-26
  • 打赏
  • 举报
回复
在循环体中每一次查询出来的结果就是存储过程查询出来的结果集,和楼上说的不一样,例子我也看过,好像是从网上搜来的
liuxiuming 2010-01-26
  • 打赏
  • 举报
回复
楼上的答非所问吧?
ztenv 2010-01-26
  • 打赏
  • 举报
回复

<?xml version="." encoding="gb"?>
<bookstore>
<book genre="fantasy" ISBN="--">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>.</price>
</book>
</bookstore>





1、往<bookstore>节点中插入一个<book>节点:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>

XmlElement xe=xmlDoc.CreateElement("book");//创建一个<book>节点
xe.SetAttribute("genre","李小龙");//设置该节点genre属性
xe.SetAttribute("ISBN","--");//设置该节点ISBN属性

XmlElement xesub=xmlDoc.CreateElement("title");
xesub.InnerText="CS从入门到精通";//设置文本节点
xe.AppendChild(xesub);//添加到<book>节点中
XmlElement xesub=xmlDoc.CreateElement("author");
xesub.InnerText="候捷";
xe.AppendChild(xesub);
XmlElement xesub=xmlDoc.CreateElement("price");
xesub.InnerText=".";
xe.AppendChild(xesub);

root.AppendChild(xe);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml");


//================
结果为:




<?xml version="." encoding="gb"?>
<bookstore>
<book genre="fantasy" ISBN="--">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>.</price>
</book>
<book genre="李小龙" ISBN="--">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>.</price>
</book>
</bookstore>





2、修改节点:将genre属性值为“李小龙“的节点的genre值改为“update李小龙”,将该节点的子节点<author>的文本修改为“亚胜”。


XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="李小龙")//如果genre属性值为“李赞红”
{
xe.SetAttribute("genre","update李小龙");//则修改该属性为“update李赞红”

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNode xn in nls)//遍历
{
XmlElement xe=(XmlElement)xn;//转换类型
if(xe.Name=="author")//如果找到
{
xe.InnerText="亚胜";//则修改
break;//找到退出来就可以了
}
}
break;
}
}

xmlDoc.Save("bookstore.xml");//保存。




//=================

最后结果为:


<?xml version="." encoding="gb"?>
<bookstore>
<book genre="fantasy" ISBN="--">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>.</price>
</book>
<book genre="update李小龙" ISBN="--">
<title>CS从入门到精通</title>
<author>亚胜</author>
<price>.</price>
</book>
</bookstore>




3、删除 <book genre="fantasy" ISBN="--">节点的genre属性,删除 <book genre="update李赞红" ISBN="--">节点。


XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;


if(xe.GetAttribute("genre")=="fantasy")
{
xe.RemoveAttribute("genre");//删除genre属性
}
else if(xe.GetAttribute("genre")=="update李小龙")
{
xe.RemoveAll();//删除该节点的全部内容
}
}
xmlDoc.Save("bookstore.xml");

//====================

最后结果为:


<?xml version="." encoding="gb"?>
<bookstore>
<book ISBN="--">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>.</price>
</book>
<book>
</book>
</bookstore>


4、显示所有数据。


XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

XmlNodeList xnl=xn.ChildNodes;

foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
Console.WriteLine(xe.GetAttribute("ISBN"));

XmlNodeList xnf=xe.ChildNodes;
foreach(XmlNode xn in xnf)
{
Console.WriteLine(xn.InnerText);//显示子节点点文本
}
}

liuxiuming 2010-01-26
  • 打赏
  • 举报
回复
楼上几位能给出详细一点的代码吗?谢谢
ztenv 2010-01-26
  • 打赏
  • 举报
回复
先把xml文件读到内存,再添加结点,再保存就行了
FrankSun80 2010-01-26
  • 打赏
  • 举报
回复
自己写代码,循环添加xml节点~
JavaK 2010-01-26
  • 打赏
  • 举报
回复
WriteXml(string, XmlWriteMode);这个是写整个xml文档的,当然是覆盖啊!

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧