4
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 は返しません。

これには何か理由がありますか?また、param は一般的なSQLインジェクション パターンで検証されますか?

ご指摘ありがとうございます。

4

2 に答える 2

3

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.executequery.aspx

パラメータを受け取るオーバーロードされたバージョンの ExecuteQuery を使用しようとしています。パラメータは Object 配列として渡す必要があります。次に例を示します。

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

とにかく、クエリは 1 つのパラメーターのみを受け取ります。

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

3 つの xml 値で構成される単一のパラメーターを渡したいようです。私は XQuery の専門家ではありませんが、これを試すことができます。

object[] param = new Object[] { "''value1'', ''value2'', ''value3''" };
string query = @"SELECT ColA, ColXML FROM TableT WHERE ColXML.exist('/SuperNode/Node/SubNode[.=({0})]') = 1";
于 2012-08-20T10:33:27.853 に答える