Изменение данных в наборах данных с помощью платформа .NET Framework

Примечание.

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Они особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

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

Помимо изменения фактических данных, можно также запросить DataTable возврат определенных строк данных. Например, можно запросить отдельные строки, определенные версии строк (исходные и предлагаемые), измененные строки или строки с ошибками.

Изменение строк в наборе данных

Чтобы изменить существующую строку в DataTableстроке, необходимо найти DataRow нужные столбцы, а затем назначить обновленные значения нужным столбцам.

Если вы не знаете индекс строки, которую вы хотите изменить, используйте FindBy метод для поиска по первичному ключу:

NorthwindDataSet.CustomersRow customersRow = 
    northwindDataSet1.Customers.FindByCustomerID("ALFKI");

customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";

Если вы знаете индекс строки, вы можете получить доступ к строкам и изменить их следующим образом:

northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";

Вставка новых строк в набор данных

Приложения, использующие элементы управления с привязкой к данным, обычно добавляют новые записи с помощью кнопки "Добавить новое " в элементе управления BindingNavigator.

Чтобы вручную добавить новые записи в набор данных, создайте новую строку данных, вызвав метод в DataTable. Затем добавьте строку в DataRow коллекцию (Rows) объекта DataTable:

NorthwindDataSet.CustomersRow newCustomersRow = 
    northwindDataSet1.Customers.NewCustomersRow();

newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Чтобы сохранить сведения, необходимые набору данных для отправки обновлений в источник данных, используйте Delete метод для удаления строк в таблице данных. Например, если приложение использует метод TableAdapter (или DataAdapter), метод TableAdapter Update удаляет строки в базе данных, в которых есть RowStateDeleted.

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

Удаление записей из таблицы данных

  • Delete Вызов метода объекта DataRow.

    Этот метод физически не удаляет запись. Вместо этого она помечает запись для удаления.

    Примечание.

    Если вы получаете свойство count объекта DataRowCollection, результирующее число включает записи, помеченные для удаления. Чтобы получить точное количество записей, которые не помечены для удаления, можно прокрутить коллекцию, глядя на RowState свойство каждой записи. (Записи, помеченные для удаления, имеют значение RowStateDeleted.) Кроме того, можно создать представление данных набора данных, который фильтрует по состоянию строки и получить свойство счетчика оттуда.

В следующем примере показано, как вызвать Delete метод, чтобы пометить первую строку в Customers таблице как удаленную:

northwindDataSet1.Customers.Rows[0].Delete();

Определение наличия измененных строк

При внесении изменений в записи в наборе данных сведения об этих изменениях хранятся до их фиксации. Изменения фиксируются при вызове AcceptChanges метода набора данных или таблицы данных или при вызове Update метода TableAdapter или адаптера данных.

Изменения отслеживаются двумя способами в каждой строке данных:

  • Каждая строка данных содержит информацию, связанную с ней RowState (например, Added, или ModifiedDeletedUnchanged).

  • Каждая измененная строка данных содержит несколько версий этой строки (), исходную версию (DataRowVersionдо изменений) и текущую версию (после изменений). В течение периода, когда ожидается изменение (время, когда можно ответить RowChanging на событие), третья версия — предлагаемая версия также доступна.

Метод HasChanges набора данных возвращается true , если изменения были внесены в набор данных. После определения того, что измененные строки существуют, можно вызвать GetChanges метод a DataSet или DataTable вернуть набор измененных строк.

Определение того, были ли внесены изменения в любые строки

  • HasChanges Вызовите метод набора данных, чтобы проверка для измененных строк.

В следующем примере показано, как проверка возвращаемое значение из HasChanges метода, чтобы определить, есть ли в наборе NorthwindDataset1данных какие-либо измененные строки:

if (northwindDataSet1.HasChanges()) 
{
    // Changed rows were detected, add appropriate code.
}
else
{
    // No changed rows were detected, add appropriate code.
}

Определение типа изменений

Вы также можете проверка, чтобы узнать, какой тип изменений были внесены в набор данных, передав значение из DataRowState перечисления в HasChanges метод.

Определение типа изменений, внесенных в строку

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

if (northwindDataSet1.HasChanges(DataRowState.Added)) 
{
    // New rows have been added to the dataset, add appropriate code.
}
else
{
    // No new rows have been added to the dataset, add appropriate code.
}

Поиск строк с ошибками

При работе с отдельными столбцами и строками данных могут возникнуть ошибки. Вы можете проверка HasErrors свойство, чтобы определить, существуют ли ошибки в объекте DataSet, DataTableили DataRow.

  1. HasErrors Проверьте свойство, чтобы узнать, существуют ли ошибки в наборе данных.

  2. HasErrors Если свойство имеет значениеtrue, выполните итерацию по коллекциям таблиц, а затем по строкам, чтобы найти строку с ошибкой.

private void FindErrors() 
{
    if (dataSet1.HasErrors)
    {
        foreach (DataTable table in dataSet1.Tables)
        {
            if (table.HasErrors)
            {
                foreach (DataRow row in table.Rows)
                {
                    if (row.HasErrors)
                    {
                        // Process error here.
                    }
                }
            }
        }
    }
}