Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Вставка новых записей в базу данных с помощью метода TableAdapter.Insert:

  • Вызовите метод адаптера таблиц Insert, передав значения для каждого столбца в качестве параметров.

Примечание.

Если у вас нет экземпляра адаптера таблиц, создайте экземпляр, который вы хотели бы использовать.

NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter =

new NorthwindDataSetTableAdapters.RegionTableAdapter();

regionTableAdapter.Insert(5, "NorthWestern");

 

Обновление данных на форме с помощью адаптера таблицы

После того, как данные в наборе данных были изменены и проверены, возможно, потребуется отправить обновленные данные обратно в базу данных. Для отправки измененных данных в базу данных чаще всего вызывают метод Update объекта TableAdapter. Метод Update адаптера обновит одну таблицу с данными и выполнит корректную команду (INSERT, UPDATE или DELETE) в зависимости от свойства RowState каждой строки данных в таблице. При сохранении данных в связанных таблицах Visual Studio предоставляет новый компонент TableAdapterManager, который помогает выполнять сохранение в правильном порядке в зависимости от ограничений внешнего ключа, определенных в базе данных. Дополнительные сведения см. в разделе Общие сведения об иерархическом обновлении.

Примечание. Так как попытка обновления источника данных содержимым набора данных может вызвать ошибки, следует вставлять код, который вызывает метод Update адаптера внутри блока try/catch.

Сама процедура обновления источника данных может варьироваться в зависимости от поставленных задач, но в любом случае приложение должно включать следующие этапы.

  1. Вызовите метод Update адаптера внутри блока try/catch.

  2. При возникновении исключения найдите строку данных, которая его вызвала. Дополнительные сведения см. в разделе Практическое руководство. Поиск строк с ошибками.

  3. Устраните ошибку в строке данных (по возможности программно, или путем предложения пользователю отредактировать ошибочную строку), затем повторите попытку обновления (HasErrors, GetErrors).

Для сохранение данных в базе данных следует вызвать метод Update объекта TableAdapter, передав имя таблицы, которая содержит значения для записи в базу данных. В следующем примере демонстрируется попытка обновления внутри блока try/catch содержимым таблицы Customers в NorthwindDataSet.

try

{

this.Validate();

this.customersBindingSource.EndEdit();

this.customersTableAdapter.Update(this.northwindDataSet.Customers);

MessageBox.Show("Update successful");

}

catch (System.Exception ex)

{

MessageBox.Show("Update failed");

}

Обновление двух связанных таблиц в наборе данных с помощью TableAdapter

При обновлении связанных таблиц в наборе данных необходимо обновлять их в правильной последовательности, чтобы уменьшить вероятность нарушения ограничений целостности данных. Порядок выполнения команды будет также зависеть от индексов DataRowCollection в наборе данных. Чтобы предотвратить возникновение ошибок, связанных с целостностью данных, рекомендуется обновлять базу данных в следующей последовательности:

  1. Дочерняя таблица: удаление записей.

  2. Родительская таблица: вставка, обновление и удаление записей.

  3. Дочерняя таблица: вставка и обновление записей.

Примечание. При обновлении двух или более связанных таблиц следует включить всю логику обновления в транзакцию. Транзакция — это процесс, гарантирующий, что все взаимосвязанные изменения в базе данных будут успешными вплоть до фиксации изменений. Дополнительные сведения см. в разделе Транзакции и параллелизм (ADO.NET).

Для обновления двух связанных таблиц с помощью TableAdapter:

  1. Создайте три временных таблицы данных для хранения различных записей.

  2. Вызовите метод Update для каждого подмножества строк из блока try/catch. При возникновении ошибок обновления следует остановиться и устранить их.

  3. Зафиксируйте изменения в базе данных.

  4. Удалите временные таблицы данных для освобождения системных ресурсов.

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

void UpdateDB()

{

BoreiDataSet.GoodsDataTable deletedChildRecords =

(BoreiDataSet.GoodsDataTable)boreiDataSet.Goods.GetChanges(DataRowState.Deleted);

BoreiDataSet.GoodsDataTable newChildRecords =

(BoreiDataSet.GoodsDataTable)boreiDataSet.Goods.GetChanges(DataRowState.Added);

BoreiDataSet.GoodsDataTable modifiedChildRecords =

(BoreiDataSet.GoodsDataTable)boreiDataSet.Goods.GetChanges(DataRowState.Modified);

try

{

if (deletedChildRecords != null)

{

GoodsTableAdapter.Update(deletedChildRecords);

}

suppliersTableAdapter.Update(northwindDataSet.Customers);

if (newChildRecords != null)

{

goodsTableAdapter.Update(newChildRecords);

}

if (modifiedChildRecords != null)

{

goodsTableAdapter.Update(modifiedChildRecords);

}

boreiDataSet.AcceptChanges();

}

catch (Exception ex)

{

MessageBox.Show("An error occurred during the update process");

// Add code to handle error here.

}

finally

{

if (deletedChildRecords != null)

{

deletedChildRecords.Dispose();

}

if (newChildRecords != null)

{

newChildRecords.Dispose();

}

if (modifiedChildRecords != null)

{

modifiedChildRecords.Dispose();

}

}

}