SELECT * FROM parameter pa FOR XML AUTO, ROOT('root')使用以上语句在存储过程中使用FOR XML后输出的XML格式在C# 对象 XmlDocument中载入时就会出错:“有未闭合的字符串”改成以下:SELECT pa.XMLvalue pa.XMLvalue FROM parameter pa FOR XML AUTO, ROOT('root')注明:pa.XMLvalue 类型是XML这时在XmlDocument载入的错误是:"分析 Name 时,出现意外的文件结尾"以上两种错误只是在
XmlReader xr = sq.ExecuteXmlReader(sql);
XPathDocument xd = new XPathDocument(xr);//载入时成错误。
直接在存储过程中“执行存储过程”输出看到的是正确的XML,也只有一个根。如果去掉FOR XML
SELECT pa.XMLvalue pa.XMLvalue FROM parameter pa
这样在XmlDocument或XPathDocument载入都是正常的,也可以正常使用里面的XML数据,可是我需要多行,所以必须加一个根重新生成。问题就出在FOR XML上,有做过这些项目的高手帮我解决下。谢谢。
XmlReader xr = sq.ExecuteXmlReader(sql);
XPathDocument xd = new XPathDocument(xr);//载入时成错误。
直接在存储过程中“执行存储过程”输出看到的是正确的XML,也只有一个根。如果去掉FOR XML
SELECT pa.XMLvalue pa.XMLvalue FROM parameter pa
这样在XmlDocument或XPathDocument载入都是正常的,也可以正常使用里面的XML数据,可是我需要多行,所以必须加一个根重新生成。问题就出在FOR XML上,有做过这些项目的高手帮我解决下。谢谢。
解决方案 »
- 1433端口连接不上
- 给写个分页的存储过程!
- 请问.mssql文件是什么文件,有什么用?
- 求教:数据库附加问题
- sql server 2005如何将.db格式的数据库文件加进去?
- 大家帮忙看下,我搞不定了在线等待解决
- 问个时间比较的问题
- 要访问jsp的网站,必须要打端口号吗?比如,我的ip是61.13.123.123,要访问jsp网页,就要打http://61.13.123.123:8080/index.jsp吗?谢!
- 不能设置SQL主键
- 为什么用SQLDMO.BulkCopy导出的数据集为empty?
- sql2000 依次扣费怎么做?
- 帮忙写 一条sql语句 Anum字段 如果值是0就更新为1, 如果值是1就更新为0
select Cust.CustomerID CustID,CustomerType,SalesOrderID
from Sales.Customer Cust
join Sales.SalesOrderHeader [order] on Cust.CustomerID=[order].CustomerID
order by Cust.CustomerID
for XML AUTO,ELEMENTS,ROOT('Orders')
/**************<Orders>
<Cust>
<CustID>1</CustID>
<CustomerType>S</CustomerType>
<order>
<SalesOrderID>43860</SalesOrderID>
</order>
<order>
<SalesOrderID>44501</SalesOrderID>
</order>
<order>
<SalesOrderID>45283</SalesOrderID>
</order>
<order>
<SalesOrderID>46042</SalesOrderID>
</order>
</Cust>
<Cust>
<CustID>2</CustID>
<CustomerType>S</CustomerType>
<order>
<SalesOrderID>46976</SalesOrderID>
</order>
<order>
<SalesOrderID>47997</SalesOrderID>
</order>
<order>
<SalesOrderID>49054</SalesOrderID>
</order>
<order>
<SalesOrderID>50216</SalesOrderID>
</order>
<order>
<SalesOrderID>51728</SalesOrderID>
</order>
<order>
<SalesOrderID>57044</SalesOrderID>
</order>
<order>
<SalesOrderID>63198</SalesOrderID>
</order>
<order>
<SalesOrderID>69488</SalesOrderID>
</order>
</Cust>
</Orders>
<Orders>
<Cust>
<CustID>1</CustID>
<CustomerType>S</CustomerType>
<order>
<SalesOrderID>43860</SalesOrderID>
</order>
<order>
<SalesOrderID>44501</SalesOrderID>
</order>
<order>
<SalesOrderID>45283</SalesOrderID>
</order>
<order>
<SalesOrderID>46042</SalesOrderID>
</order>
</Cust>
<Cust>
<CustID>2</CustID>
<CustomerType>S</CustomerType>
<order>
<SalesOrderID>46976</SalesOrderID>
</order>
<order>
<SalesOrderID>47997</SalesOrderID>
</order>
<order>
<SalesOrderID>49054</SalesOrderID>
</order>
<order>
<SalesOrderID>50216</SalesOrderID>
</order>
<order>
<SalesOrderID>51728</SalesOrderID>
</order>
<order>
<SalesOrderID>57044</SalesOrderID>
</order>
<order>
<SalesOrderID>63198</SalesOrderID>
</order>
<order>
<SalesOrderID>69488</SalesOrderID>
</order>
</Cust>
</Orders>
select Cust.CustomerID CustID,CustomerType,
SalesOrderID from Sales.Customer Cust
join Sales.SalesOrderHeader [order]
on Cust.CustomerID=[order].CustomerID
order by Cust.CustomerID
for XML AUTO
/************<Cust CustID="1" CustomerType="S">
<order SalesOrderID="43860" />
<order SalesOrderID="44501" />
<order SalesOrderID="45283" />
<order SalesOrderID="46042" />
</Cust>
<Cust CustID="2" CustomerType="S">
<order SalesOrderID="46976" />
<order SalesOrderID="47997" />
<order SalesOrderID="49054" />
<order SalesOrderID="50216" />
<order SalesOrderID="51728" />
<order SalesOrderID="57044" />
<order SalesOrderID="63198" />
<order SalesOrderID="69488" />
</Cust>
只是这个存储过程装到XmlReader中后,用XmlDocument去解释时就会出错“分析 Name 时,出现意外的文件结尾。 行 1”
我查了很多相关资了都没找到,如果不用For Xml是可正常的,所以最后确定是For XML生成的XML编码问题。
SELECT * FROM parameter pa FOR XML AUTO, ROOT('root')把查询分析器中的结果贴出来看一下。
<pr>
<value>
<item id="201107221123146562" units="JIA">
<add key="country" value="US" />
<add key="key_name" value="JIF" />
<add key="parameterKey" value="201107111703551925" />
<add key="title_pro" value="asdfadsf" />
<add key="units" value="JIA" />
<add key="price_sum" value="88" />
</item>
</value>
</pr>
<pr>
<value>
<item id="201107221646454218" units="JIA">
<add key="country" value="US" />
<add key="key_name" value="JIF" />
<add key="parameterKey" value="201107111703551925" />
<add key="title_pro" value="ssssssss" />
<add key="units" value="JIA" />
<add key="price_sum" value="33" />
</item>
</value>
</pr>
<pr>
<value>
<item id="201107221646236093" units="JIA">
<add key="country" value="US" />
<add key="key_name" value="JIF" />
<add key="parameterKey" value="201107111703552081" />
<add key="title_pro" value="dfasdfadfddddd" />
<add key="units" value="JIA" />
<add key="price_sum" value="50" />
</item>
</value>
</pr>
<pr>
<value>
<item id="201107221646236093" units="JIA">
<add key="country" value="US" />
<add key="key_name" value="JIF" />
<add key="parameterKey" value="201107111703552081" />
<add key="title_pro" value="dfasdfadfddddd" />
<add key="units" value="JIA" />
<add key="price_sum" value="50" />
</item>
</value>
</pr>
<pr>
<value>
<item id="201107221647001562" units="JIA">
<add key="country" value="US" />
<add key="key_name" value="JIF" />
<add key="parameterKey" value="201107111703552706" />
<add key="title_pro" value="sssssss" />
<add key="units" value="JIA" />
<add key="price_sum" value="55" />
</item>
</value>
</pr>
<pr>
<value>
<item id="201107221647001562" units="JIA">
<add key="country" value="US" />
<add key="key_name" value="JIF" />
<add key="parameterKey" value="201107111703552706" />
<add key="title_pro" value="sssssss" />
<add key="units" value="JIA" />
<add key="price_sum" value="55" />
</item>
</value>
</pr>
</root>
查到的XML是这样的,也是我想要的样子,可是用ExecuteXmlReader存到XmlReader就出错了。
然后不用XMLReader而是用object 接收,转成string 类型,用的时候把编码加上
<?xml version="1.0" encoding=”GB2312” ?>
现在只想找出FOR XML的问题
谢谢了,
用其它的字符串转换都是可以的,我用
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet dataset = new DataSet ();
adapter.Fill(dataset);
dataset.GetXml()
这样也可以获取XML,
只是我搞不明白,MSDN上说是很明白FOR XML是输出的标准的XML 为什么要转成字符串呢。
这样的做法就很过于免强的,性能上不佳哦。
这样会错误的,ReadOuterXml()报的是同样的错误.就算用ReadOuterString也是错的,搞不明白。
我去掉FOR XML AUTO,ROOT('root')后就一切都正常了。。
我找出问题了,问题就是XML类型的数据再用FOR XML时会把保存在XML列中的XML格式掉,这账应该算在微软头上。我重做了几次结果出来了。
比如我在一个列中存的XML数据是<body>主要的</body>
然后用FOR XML加上根上去 ROOT('root')
在存储过程中看到的是正确的XML可是再经过XmlReader后不知道为什么把他转义了,成了这样
<root>
<body>主要的<body>
</root>
http://msdn.microsoft.com/zh-cn/library/ms187082(v=sql.90).aspx