2011-10-05 221 views
3

要求我有一个SP返回我:无效的XML标识符FOR XML

Select 10 as Visits,5 as [Test_Drives],3 as Orders,'£5000' as [Profit_£],4 as Deliveries,'£6000' as [Delivered_Profit_£] 

FOR XML PATH('CONTENT'),ROOT('SOMEROOT') 

但是当我使用ouptut作为

Dim dr As New SqlDataAdapter(SqlCmd) 
Dim tbl As New DataTable 
dr.Fill(tbl) 

我得到一个错误

列名'Profit_£'包含FOR XML所要求的无效XML标识符; '£'(0x00A3)是错误的第一个字符。

问题是我需要有一个原始名称的列。

我该如何解决这个问题?

回答

5

它的not legal有一个包含£符号的节点名称,所以即使您可以说服mssql来允许您使用,但是对于生成的XML所做的任何操作都可能会被拒绝。

如果你想要XML并且不在意它的结构不良,你将不得不返回一个常规的结果集到你的.net应用程序中并手动构建一个xml字符串。

最好不要使用£首先; ... as [Profit_Pounds]

根据你想要的,FOR XML RAW会自动将£转换成_x名称。

2

您需要为含有井号的列找到另一个名称,因为这些名称对于FOR XML无效。

请考虑使用货币缩写,例如Profit_GBP,Delivered_Profit_GBP

XML数据格式仅支持无重音的US-ASCII字符A-Z,一些标点符号和数字。英镑符号(和欧元)明确不支持。