2012-05-02 40 views
0

我用这个白皮书从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“后面的所有内容直到逗号,并且在DB中存在元素时返回某些内容,则能够执行该命令。

我也很好奇我是否以正确的方式设置QUOTED_IDENTIFIER值。

在C#/ MSSQL中的任何示例项目/教程我可能会看看,也将不胜感激!

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

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

没有“唯一的数值比较工作

回答

0

我认为你错过了WHERE和012之间的空格:

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

感谢您修复了这个问题......我一直都很想学习XQuery,我不认为这可能是一个简单的错误! –

0

你应该避免建筑SQL通过连接字符串是SQL注入漏洞你需要一个分号后ON您的列数据类型必须是xml或您必须将其转换为xml

+0

谢谢! 我的列是xml类型的,我已经检查过其他地方的危险字符。 –