Практическое руководство. Обновление записей в базе данных
Обновлен: Ноябрь 2007
Можно использовать метод TableAdapter.Update для обновления (изменения) записей в базе данных. Метод TableAdapter.Update предоставляет несколько перегрузок, которые выполняют различные операции в зависимости от передаваемых параметров. Важно понимать результаты вызова различных подписей метода.
Примечание. |
---|
Если приложение не использует адаптеры таблиц, можно использовать командные объекты для обновления записей в базе данных (например, ExecuteNonQuery). Дополнительные сведения по обновлению данных с помощью командных объектов содержатся в разделе "Обновление записей с помощью командных объектов" ниже. |
В следующей таблице описывается поведение различных методов TableAdapter.Update:
Метод |
Описание |
---|---|
TableAdapter.Update(DataTable) |
Пытается сохранить все изменения DataTable в базе данных. (Это включает удаление всех строк, удаленных из таблицы, добавление вставленных в таблицу строк и обновление всех строк в таблице, которые были изменены.) |
TableAdapter.Update(DataSet) |
Хотя параметр принимает набор данных, адаптер таблиц пытается сохранить все изменения в связанной с ним таблице DataTable в базе данных. (Это включает удаление всех строк, удаленных из таблицы, добавление вставленных в таблицу строк и обновление всех строк в таблице, которые были изменены.) |
TableAdapter.Update(DataRow) |
Пытается сохранить все изменения в указанной строке DataRow в базе данных. |
TableAdapter.Update(DataRows()) |
Пытается сохранить изменения в любой строке массива DataRow в базе данных. |
TableAdapter.Update("new column values", "original column values") |
Пытается сохранить изменения в одной строке, определяемой исходными значениями столбцов. |
Как правило, используется метод TableAdapter.Update, который принимает DataSet, DataTable или DataRow, когда приложение использует наборы данных исключительно для хранения данных.
Как правило, используется метод TableAdapter.Update, который принимает значения столбцов, когда приложение использует объекты для хранения данных.
Если TableAdapter не имеет метода Update, который принимает значения столбцов, это означает, что либо TableAdapter настроен на использование сохраненных процедур, либо значение его свойства GenerateDBDirectMethods равно false. Попробуйте присвоить свойству GenerateDBDirectMethods адаптера таблиц TableAdapter значение true из Конструктора наборов данных и затем сохранить набор данных, чтобы заново создать адаптер таблиц. Если TableAdapter по-прежнему не имеет метода Update, который принимает значения столбцов, то таблица, скорее всего, не предоставляет достаточно сведений схемы для различения отдельных строк (например, нет первичного ключа на таблице).
Обновление существующих записей с помощью TableAdapter
TableAdapter предоставляет различные способы обновления записей в базе данных в зависимости от требований приложения.
Если приложение использует для хранения данных набор данных, можно просто обновить записи в нужной таблице DataTable, вызвать метод TableAdapter.Update и передать либо DataSet, DataTable, DataRow, либо массив DataRow. В таблице выше описаны различные методы Update.
Для обновления записей в базе данных с помощью метода TableAdapter.Update, принимающего объект DataSet, DataTable, DataRow или DataRows():
Измените записи в нужной DataTable путем прямого редактирования DataRow в DataTable. Дополнительные сведения см. в разделе Практическое руководство. Редактирование строк в объекте DataTable.
После редактирования строк в DataTable вызовите метод TableAdapter.Update. Можно контролировать объем данных для обновления путем передачи всего DataSet, DataTable, массива DataRow или одной DataRow.
Следующий фрагмент кода иллюстрирует редактирование записи в таблице DataTable и затем вызов метода TableAdapter.Update для сохранения изменений в базе данных. (Этот пример использует таблицу Region базы данных "Борей").
' Locate the row you want to update. Dim regionRow As NorthwindDataSet.RegionRow regionRow = NorthwindDataSet._Region.FindByRegionID(1) ' Assign the new value to the desired column. regionRow.RegionDescription = "East" ' Save the updated row to the database Me.RegionTableAdapter.Update(Me.NorthwindDataSet._Region)
// Locate the row you want to update. NorthwindDataSet.RegionRow regionRow; regionRow = northwindDataSet.Region.FindByRegionID(1); // Assign the new value to the desired column. regionRow.RegionDescription = "East"; // Save the updated row to the database. this.regionTableAdapter.Update(this.northwindDataSet.Region);
Если приложение использует объекты для хранения данных в приложении, можно использовать методы DBDirect TableAdapter для отправки данных из объектов прямо в базу данных. Эти методы позволяют передавать отдельные значения для каждого столбца в качестве параметров метода. Вызов этого метода обновляет существующую запись в базе данных значениями столбца, передаваемыми в метод.
В следующей процедуре в качестве примера используется таблица Region базы данных "Борей".
Для обновления записей в базе данных с помощью метода TableAdapter.Update, который принимает значения столбцов:
Вызовите метод адаптера таблиц Update, передав в него новые и оригинальные значения для каждого столбца в качестве параметров.
Примечание. Если у вас нет экземпляра адаптера таблиц, создайте экземпляр, который вы хотели бы использовать.
Dim regionTableAdapter As New NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter.Update(1, "East", 1, "Eastern")
NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = new NorthwindDataSetTableAdapters.RegionTableAdapter(); regionTableAdapter.Update(1, "East", 1, "Eastern");
Обновление записей с помощью командных объектов
В следующем примере обновляются существующие записи непосредственно в базе данных с помощью командных объектов. Дополнительные сведения по использованию объектов команд для выполнения команд и хранимых процедур содержатся в разделе Выборка данных в приложение.
В следующей процедуре в качестве примера используется таблица Region базы данных "Борей".
Чтобы обновить существующие записи в базе данных с помощью командных объектов:
Создайте новый командный объект; задайте его свойства Connection, CommandType и CommandText; затем откройте подключение и выполните команду.
Dim sqlConnection1 As New System.Data.SqlClient.SqlConnection("YOUR CONNECTION STRING") Dim cmd As New System.Data.SqlClient.SqlCommand cmd.CommandType = System.Data.CommandType.Text cmd.CommandText = "UPDATE Region SET RegionID = 1, RegionDescription = 'East' WHERE RegionID = 1" cmd.Connection = sqlConnection1 sqlConnection1.Open() cmd.ExecuteNonQuery() sqlConnection1.Close()
System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection("YOUR CONNECTION STRING"); System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "UPDATE Region SET RegionID = 1, RegionDescription = 'East' WHERE RegionID = 1"; cmd.Connection = sqlConnection1; sqlConnection1.Open(); cmd.ExecuteNonQuery(); sqlConnection1.Close();
Безопасность
Необходимо иметь доступ к базе данных, к которой вы пытаетесь подключиться, а также разрешение на обновление записей в нужной таблице.
См. также
Задачи
Практическое руководство. Удаление записей из базы данных
Практическое руководство. Вставка новых записей в базу данных
Практическое руководство. Сохранение данных из объекта в базе данных
Основные понятия
Общие сведения об адаптере таблиц
Другие ресурсы
Начало работы с доступом к данным
Подключение к данным в Visual Studio
Подготовка приложения к получению данных
Отображение данных на форме в приложениях Windows