MSSQL XQuery的语法错误或根本没有结果

时间:2012-05-02 17:08:29

标签: c# sql visual-studio syntax xquery

我使用MS的这份白皮书作为参考: http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx

但是,当我尝试以下查询时出现错误:

    command = new SqlCommand(
    "SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE" + 
    "XML.exist('//Root/ActiveRecord[" + s1 + 
    "= " + s2 + "]') = 1"
    , connection);

错误是:“语法错误附近”。“。

如果我删除“XMLObject”之后的所有内容直到逗号,我就可以执行命令,如果数据库中存在元素,则返回一些内容。

我也很好奇我是否正确设置QUOTED_IDENTIFIER值。

我可能会看到C#/ MSSQL中的任何示例项目/教程也会受到赞赏!

编辑: 对于任何人看到这一点,我也发现正确的使用方式是:

    "...exist('/Root/ActiveRecord[" + s1 + 
    "= \"" + s2 + "\"]') = 1"

没有“唯一的数字比较工作。

2 个答案:

答案 0 :(得分:0)

你应该避免通过连接字符串来构建SQL,因为SQL注入是易受攻击的。开后你需要一个分号。您的columns数据类型必须是xml,或者必须将其转换为xml。

答案 1 :(得分:0)

我认为您错过了WHEREXML之间的空格:

command = new SqlCommand(
    "SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE " + // Note space
    "XML.exist('//Root/ActiveRecord[" + s1 + 
    "= " + s2 + "]') = 1"
    , connection);