Я пытаюсь запросить существующую базу данных доступа и позволить пользователю выбирать несколько значений для предложения WHERE. Я использую этот код обнаружен на этом сайте любезно пользователя Mark Брэкетом:Запрос базы данных с неизвестным количеством параметров
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 Tags.
Это большое спасибо. Я также вижу, что в моем запросе могу иметь несколько из этих предложений с несколькими параметрами, используя мой cmdText как «Выберите * FROM Tags WHERE 1 = 1», а затем используйте свой код с «AND Name IN ({0})» и т. Д. – KorbenDallas