我试图查询现有的访问数据库并允许用户为WHERE子句选择多个值。我一直在使用此代码对用户马克布拉克特本网站礼貌发现:查询具有未知数量参数的数据库
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"
这工作出色,但我想下面的功能良好。如果用户决定不输入任何值(在本例中,如果标签数组为空),那么我希望返回所有结果。有效地只是一个SELECT * FROM标签。
这真是太好了,谢谢。我还可以看到,通过将我的cmdText设置为“Select * FROM Tags WHERE 1 = 1”,我可以在查询中使用这些多个参数子句中的几个,然后在“AND Name IN({0})”中使用您的代码。 – KorbenDallas