既存のアクセス データベースにクエリを実行し、ユーザーが WHERE 句に対して複数の値を選択できるようにしようとしています。ユーザー Mark Brackett の厚意により、このサイトにある次のコードを使用しています。
string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" };
string cmdText = "SELECT * FROM Tags WHERE Name IN ({0})";
string[] paramNames = tags.Select(
(s, i) => "@tag" + i.ToString()
).ToArray();
string inClause = string.Join(",", paramNames);
using (SqlCommand cmd = new SqlCommand(string.Format(cmdText, inClause))) {
for(int i = 0; i < paramNames.Length; i++) {
cmd.Parameters.AddWithValue(paramNames[i], tags[i]);
}
}
これにより、次のようになります。
cmd.CommandText = "SELECT * FROM Tags WHERE Name IN (@tag0,@tag1,@tag2,@tag3)"
cmd.Parameters["@tag0"] = "ruby"
cmd.Parameters["@tag1"] = "rails"
cmd.Parameters["@tag2"] = "scruffy"
cmd.Parameters["@tag3"] = "rubyonrails"
これはうまく機能しますが、次の機能も欲しいです。ユーザーが値を入力しないことにした場合 (この例では、tags 配列が空の場合)、すべての結果が返されるようにします。事実上、単なる SELECT * FROM タグです。