1

Microsoft Indexing Serviceカタログにクエリを実行しようとしていますが、(このような)非常に役立つ記事がたくさん見つかりましたが、すべての例で、文字列の連結を使用してクエリを作成しているため、非常に間違っていると感じています。非常に多くの異なるレベルで。

パラメータ化されたクエリを使用したいのは明らかですが、次の例外で説明されているように、MSインデックスプロバイダーはそれらをサポートしていないようです。

ICommandWithParametersインターフェイスは、「MSIDXS」プロバイダーではサポートされていません。コマンドパラメーターは、現在のプロバイダーではサポートされていません。

これが私のコードの簡単な例です。私がやりたいのは、本当に単純なクエリを実行し、不正な入力から保護することだけです。

OleDbCommand cmd = new OleDbCommand("select DocTitle, Path from scope() where @friendlyName = '@value'", ActiveConnection());
cmd.Parameters.Add(new OleDbParameter("@friendlyName", friendlyName));
cmd.Parameters.Add(new OleDbParameter("@value", value));

OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet results = new DataSet();
da.Fill(results);

文字列の連結を使用せざるを得ない場合、入力をサニタイズするための最良の方法は何ですか?すべてのケースをカバーしたことをどうやって知ることができますか?

4

1 に答える 1

0

パラメータには名前が必要ですか? この msdn の例は、法案に適合するようです。

public void CreateMyOleDbCommand(OleDbConnection connection,
string queryString, OleDbParameter[] parameters) {
OleDbCommand command = new OleDbCommand(queryString, connection);
command.CommandText = 
    "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
command.Parameters.Add(parameters);

for (int j=0; j<parameters.Length; j++)
{
    command.Parameters.Add(parameters[j]) ;
}

string message = "";
for (int i = 0; i < command.Parameters.Count; i++) 
{
    message += command.Parameters[i].ToString() + "\n";
}
Console.WriteLine(message);

}

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

于 2010-10-15T14:11:02.207 に答える