Задать вопрос
@White_Bambie

Вывести записи из БД циклом с фильтром по массиву?

Необходимо выгрузить данные из БД и передать в репорт. Но нужно отфильтровать записи через массив.
Пробовал вывод через цикл for, но почему-то выводит последнюю запись.
private void ReportTwoShow()
        {
            MySqlConnection con = new MySqlConnection(AppSetting.ConnectonString());

            string[] array = new string[] { "Запись 1", "Запись 2" };


            MySqlCommand cmd_FillTestimony; // Получаем данные из таблицы testimony
            cmd_FillTestimony = con.CreateCommand();
            cmd_FillTestimony.CommandText = "SELECT * FROM testimony";
// Я так понимаю предыдущая строка должна выглядеть как-то так: cmd_FillTestimony.CommandText = "SELECT * FROM testimony WHERE Name = '"+ array +"'";

            try
            {
                con.Open();

                MySqlDataAdapter da_testimony = new MySqlDataAdapter(cmd_FillTestimony);
                DataSet dataset_testimony = new DataSet();
                da_testimony.Fill(dataset_testimony, "testimony");

                report2.RegisterData(dataset_testimony.Tables["testimony"], "testimony");
                (report2.Report.FindObject("Testimony_Data") as DataBand).DataSource = report2.GetDataSource("testimony");
                report2.GetDataSource("testimony").Enabled = true;

                con.Close();

            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

            report2.Show();
        }
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой 13 комментариев
Решения вопроса 1
Casper-SC
@Casper-SC
Программист (.NET)
Нужно сформировать одну строку вида "@record1, @record2" (параметризованные запросы), а потом уже передать в качестве параметров нужные значения.

SELECT * FROM testimony WHERE Name IN(@record1, @record2)


Примерно так (код не запускал, по быстрому набросал). Да, код можно написать лучше, это просто пример для понимания идеи. StringBuilder вместо string здесь приведёт к просадке производительности, малые строки быстрее так складывать:
string sql = "SELECT * FROM testimony WHERE Name IN({0})";
string parameters = "";
string[] array = new string[] { "Запись 1", "Запись 2" };
for (int i = 0; i < array.Length; i++)
{
    parameters += "@record" + (i + 1) + (i < array.Length - 1 ? ", ": "");
}

using (SqlCommand cmd = new SqlCommand(string.Format(sql, parameters), this.connect))
{
    // Добавить параметры
    for (int i = 0; i < array.Length; i++)
    {
        cmd.Parameters.AddWithValue("@record" + (i + 1), array[i]);
    }

    cmd.ExecuteNonQuery();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Вот холивары с вариантами решения по Вашему вопросу: https://askdev.ru/q/parametrizaciya-predlozheniya-...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы