Я изменяю значение в моем приложении, но не обновляю в моей базе данных - PullRequest
1 голос
/ 07 мая 2009

Я пишу этот код в своем проекте, но когда я изменяю значение в своем приложении, появляется исключение и не обновляется моя база данных, этот код работает для новых, но не работает для удаления и редактирования данных.

КОД:

private void btnLecOk_Click(object sender, EventArgs e)
    {
            DataRow dr = (lecturesBindingSource.Current as DataRowView).Row;
            dr["Section_ID"] = Convert.ToInt32(cmbLec_Section_Name.SelectedValue);
            dr["Lecture_Type_ID"] = Convert.ToInt32(cmbLec_Lecture_Type.SelectedValue);
            dr["Practicable_Unit"] = numLec_Practicable_Unit.Value;
            dr["theoretical_Unit"] = numLec_Theoretical_Unit.Value;
            dr["Term"] = numLec_Term.Value;

            lecturesBindingSource.EndEdit();
            lecturesTableAdapter.Update(dsSchedule.Lectures);
            EnableLectureControls();
    }

Исключение:

System.Data.DBConcurrencyException не обработано Сообщение = "Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей." Source = "System.Data" RowCount = 1

Обновление запроса Sql:

ОБНОВЛЕНИЕ Лекции SET Lecture_Code = @Lecture_Code, Section_ID = @Section_ID, Lecture_Type_ID = @Lecture_Type_ID, Lecture_Name = @Lecture_Name, Practicable_Unit = @Practicable_Unit, теоретический_Unit = @theoretical_Unit, Lecture_Capacity = @Lecture_Capacity, Term = @Term WHERE (Lecture_Code = @Original_Lecture_Code) И (Section_ID = @Original_Section_ID) И (Lecture_Type_ID = @Original_Lecture_Type_ID) И (Lecture_Name = @Original_Lecture_Name) И (Practicable_Unit = @Original_Practicable_Unit) И (теоретический_Unit = @Original_theoretical_Unit) И (Lecture_Capacity = @Original_Lecture_Capacity) И (Срок = @Original_Term)

Ответы [ 2 ]

2 голосов
/ 07 мая 2009

Однажды у меня была такая же проблема, и, насколько я помню, она работала после изменения свойства отношения в затронутых таблицах базы данных. Я изменил Спецификацию вставки и обновления как Каскад, и проблема больше не возникала. Хотя это, вероятно, не идеальное решение, оно сработало.

1 голос
/ 07 мая 2009

Ваш запрос на обновление содержит предложение WHERE, которое гарантирует, что строка в базе данных обновляется или удаляется только в том случае, если она не была обновлена ​​из другого источника.

Я подозреваю, что вы использовали автоматически сгенерированные SQL-запросы, предоставляемые строго типизированными адаптерами данных / таблиц?
При указании запроса SELECT для адаптера таблицы перейдите в «Дополнительные параметры». В появившемся окне есть опция «Использовать оптимистичный параллелизм». Снимите этот флажок, чтобы разрешить перезапись значений, которые изменились в базе данных с момента загрузки данных в приложение. Вы заметите, что WHERE-предложение оператора update станет намного меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...