Изменения DataSet не сохраняются в базе данных - PullRequest
2 голосов
/ 19 августа 2010

У меня есть форма окна с рядом связанных с данными полей, относящихся к клиенту.Кроме того, у меня есть DataGridView, показывающий заказы для отображаемого в данный момент клиента.Это достигается с помощью элементов управления Visual Studio времени разработки (например, проекта DataSet, BindingSources TableAdapters и TableAdapterManager.

При загрузке формы для редактирования существующего клиента она заполняется с помощью (пользовательского) метода FillByID вClientsTableAdapter для фильтрации DataSet для одного релевантного клиента, который загружает их данные в поля клиента и корректно заполняет заказы DataGridView.

Все изменения, которые я вносил в заказы клиента (в DataGridView), сохраняются вОднако при сохранении базы данных ни одно из полей сведений о клиенте отсутствует. Они доступны для редактирования и показывают правильные данные при загрузке, но внесенные изменения не сохраняются при закрытии формы. Я пробовал два отдельных способа их сохранения.теперь первый из них соответствует порядку сохранения:

this.Validate();
this.clientordersBindingSource.EndEdit();
this.clientsBindingSource.EndEdit();
this.clientordersTableAdapter.Update(projectDataSet.clientorders);
this.clientsTableAdapter.Update(projectDataSet.clients);

... а второй - с использованием примера с несколькими таблицами в MSDN. К сожалению, ни один из этих методов не работает в отношениидетали клиента - хотя сизменения в клиентских заказах * сохраняются в обоих случаях.

Моя таблица клиентов имеет следующую структуру:

refnumber, title, forename, surname, gender, dob, contactnumber

clientTableAdapter имеет следующие строки CommandText для команды DeleteCommand:InsertCommand, SelectCommand и UpdateCommand соответственно:

DELETE FROM clients WHERE (refnumber = @Original_refnumber)
INSERT INTO clients (refnumber, title, forename, surname, gender, dob, contactnumber) VALUES (@refnumber, @title, @forename, @surname, @gender, @dob, @contactnumber)
SELECT refnumber, title, forename, surname, gender, dob, contactnumber FROM clients
UPDATE clients SET refnumber = @refnumber, title = @title, forename = @forename, surname = @surname, gender = @gender, dob = @dob, contactnumber = @contactnumber WHERE (refnumber = @Original_refnumber)

При сохранении, если я добавлю переменную для захвата результата этой строки:

var res = this.clientsTableAdapter.Update(projectDataSet.clients);
  • projectDataSet.clients.Count == 1
  • projectDataSet.clients.Rows[0].ItemArray показывает измененные поля.
  • projectDataSet.clients.Rows[0].RowState == Unchanged
  • res == 0

Может кто-нибудь предложить какие-либо подсказки?Это сводило меня с ума в течение нескольких дней!


ОБНОВЛЕНИЕ

Я заново создал форму с помощью дизайнера Visual Studio, затем скопировал и вставил весь кодиз оригинальной формы.Теперь это работает.Я предполагаю, что что-то не так в файле Designer.cs с одним из полей datasources / databinding.

Спасибо за полезные советы по отладке, ewall и Ladislav Mrnka.

1 Ответ

1 голос
/ 23 августа 2010

Что вы экономите для источника данных? Во-вторых, убедитесь, что ваши табличные адаптеры имеют действительные команды обновления, вставки и удаления. У меня были проблемы, когда они не заполнялись, хотя волшебник сказал, что это сделал.

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