我使用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"
没有“唯一的数字比较工作。
答案 0 :(得分:0)
你应该避免通过连接字符串来构建SQL,因为SQL注入是易受攻击的。开后你需要一个分号。您的columns数据类型必须是xml,或者必须将其转换为xml。
答案 1 :(得分:0)
我认为您错过了WHERE
和XML
之间的空格:
command = new SqlCommand(
"SET QUOTED_IDENTIFIER ON SELECT XML FROM XMLObject WHERE " + // Note space
"XML.exist('//Root/ActiveRecord[" + s1 +
"= " + s2 + "]') = 1"
, connection);