使用C#将XML解析为SQL的Illigal限定名称字符

时间:2017-01-18 12:01:33

标签: c# sql-server xml

我正在尝试使用XML解析查询来过滤表格中的列。此查询在C#中进行,我使用SQLDataAdapter来执行查询。我的代码如下:

string sqlstring = $@"select * from [AS_GOV_PS_oud] inner join [AS_GOV_PStest13_1_2017v2]
                        on   
                                [AS_GOV_PStest13_1_2017v2].[I/O name]        = 'ST' where
cast('<a>' + replace([AS_GOV_PS_oud].Interconnection, '\""', ' </ a >< a > ') + ' </ a > ' as xml).query('for $x in / a order by $x return string($x)').value(' / ', 'varchar(max)') =                            
cast('<a>' + replace([AS_GOV_PStest13_1_2017v2].Interconnection, '\""', ' </ a >< a > ') + ' </ a > ' as xml).query('for $x in / a order by $x return string($x)').value(' / ', 'varchar(max)') ";

string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString;
using (SqlConnection myConnection = new SqlConnection(cn))
            {
                SqlDataAdapter dataadapter = new SqlDataAdapter(sqlstring, myConnection);
            }

错误代码如下:

  

类型&#39; System.Data.SqlClient.SqlException&#39;未处理的异常发生在System.Data.dll

中      

附加信息:XML解析:第1行,第33个字符,非法限定名称字符

1 个答案:

答案 0 :(得分:1)

你的代码太丑了!

有了这个,你几乎可以打破任何规则应该如何做到这一点。但是你的问题仍然可以回答:在错误的地方空白

试试这个:

SELECT CAST('<a>test</a>' AS XML) --works

SELECT CAST('< a>test</a>' AS XML) --exception due to the blank in '< a>'

SELECT CAST('<a>test</ a>' AS XML) --exception due to the blank in '</ a>'

我的建议:再一次想想整件事......你真正想要实现的目标是什么?使用这样的结构作为连接的条件是一种非常错误的方法......

重新思考并放置一个新的问题,您可以在其中设置一些样本数据,描述您的需求并提供预期的输出。

提供此问题的链接 - 如果您关注these sugggestions - SO的漫步将会帮助您找到比此更好的解决方案......