我正在尝试使用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个字符,非法限定名称字符
答案 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的漫步将会帮助您找到比此更好的解决方案......