Добавление записей в таблицу по групповым атрибутам

103
26 апреля 2021, 14:00

Здравствутйе. Возник вопрос, так как я чайник, то решил обратиться к вам. Суть: Есть некая таблица (Участок, Подучасток, Начало интервала, Окончание интервала) в нее нужно запихнуть запись на несколько подучастков сразу. Я решил это делать через чекбоксы. При групповом добавлении записи отмеченных чекбоксов, запись идет только по первому чеку.

            //вставка новой версии записи
        using (OleDbCommand cmd = Master.Connect.ORACLE_SAARC().CreateCommand())
        {
            cmd.CommandText = @"INSERT INTO SUBAREA_EXCLUDE_INTERVAL (
                       ORIGINAL_ROW_ID, OPERATOR_ID, SUBAREA_ID,
                       INTERVAL_START, INTERVAL_END)
                    VALUES ( ? /* ORIGINAL_ROW_ID */,
                     ? /* OPERATOR_ID */,
                     ? /* SUBAREA_ID */,
                     ? /* INTERVAL_START */,
                     ? /* INTERVAL_END */)";
            cmd.Parameters.AddWithValue("ORIGINAL_ROW_ID", (CurrentRecordId > 0) ? (object)CurrentRecordId : (object)System.DBNull.Value);
            cmd.Parameters.AddWithValue("OPERATOR_ID", Authentification.User.UserName);
            if (pnlSelectSubarea.Visible)
            {
                cmd.Parameters.AddWithValue("SUBAREA_ID", cbSelectSubarea.SelectedItem.Value);
            }
            else
            {
                cmd.Parameters.AddWithValue("SUBAREA_ID", ddlSubarea.SelectedItem.Value);
            }
            cmd.Parameters.AddWithValue("INTERVAL_START", cldPeriodStart.SelectedDate.Value);
            cmd.Parameters.AddWithValue("INTERVAL_END", cldPeriodEnd.SelectedDate.Value);
            cmd.ExecuteNonQuery();

cbSelectSubarea - подучастки с чекбоксами

//возврат списка порядковых номеров выбранных подучастков
                List<string> subareas = new List<string>();
                foreach (ListItem it in cbSelectSubarea.Items)
                {
                    if (it.Selected)
                        subareas.Add(cbSelectSubarea.SelectedItem.Value);
                }
                if (subareas.Count == 0) throw new Exception("Не выбрано ни одного подучастка");
                cmd.Parameters.AddWithValue("SUBAREA_ID", cbSelectSubarea.SelectedItem.Value);

Думаю, что решение кроется через цикл, но выдает ошибку типа инвалид намбер UPD: Теперь возникла следующая проблема, первый чекбокс он добавляет в таблицу спокойно, а когда цикл идет на второй отмеченный чекбокс, то выдает ошибку

Answer 1

Добавил Parameters.Clear() в foreach (ListItem it in cbSelectSubarea.Items)

Пример:

if (it.Selected)
    {
 subareas.Add(Convert.ToInt32(it.Value));
 cmd.Parameters.Clear();
 cmd.Parameters.AddWithValue("ORIGINAL_ROW_ID", (CurrentRecordId > 0) ? (object)CurrentRecordId : (object)System.DBNull.Value);
 cmd.Parameters.AddWithValue("OPERATOR_ID", Authentification.User.UserName);
 cmd.Parameters.AddWithValue("SUBAREA_ID", it.Value);
 cmd.Parameters.AddWithValue("INTERVAL_START", cldPeriodStart.SelectedDate.Value);
 cmd.Parameters.AddWithValue("INTERVAL_END", cldPeriodEnd.SelectedDate.Value);
}
READ ALSO
Вывести итоговый статус за каждый день

Вывести итоговый статус за каждый день

Есть таблица записей с полями datetime(Int) и status(Smallint)Статус может быть 1 - Успех, 2 - Отказ

92
Поиск упущенных значений в общей таблице БД

Поиск упущенных значений в общей таблице БД

Всем доброго времени сутокПопалась интересная задачка

103
Nginx и своя страница ошибки

Nginx и своя страница ошибки

Есть сервер с ISPmanager Lite 5208

95