string query = @"SELECT ColA, ColXML FROM TableT WHERE ColXML.exist('/SuperNode/Node/SubNode[.=({0})]') = 1";
string param = "''value1'',''value2'',''value3''";
string sQ = string.Format(query, param);

A: dbContext.ExecuteQuery(sQ);

B: dbContext.ExecuteQuery(query, param);

A执行并返回结果,但B不返回。
有什么原因吗?此外,参数是否得到了普通注射模式的验证?
谢谢你的指点!

最佳答案

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.executequery.aspx
您正在尝试使用接收参数的executequery的重载版本。参数必须作为对象数组传递,例如:

object[] param = new Object[] { "value1", "value2", "value3" };

无论如何,查询只接收一个参数:
string query = @"SELECT ColA, ColXML FROM TableT WHERE ColXML.exist('/SuperNode/Node/SubNode[.=({0})]') = 1";

似乎要传递由三个xml值组成的单个参数。我不是xquery专家,但您可以试试:
object[] param = new Object[] { "''value1'', ''value2'', ''value3''" };
string query = @"SELECT ColA, ColXML FROM TableT WHERE ColXML.exist('/SuperNode/Node/SubNode[.=({0})]') = 1";

10-04 19:24