Для версии Microsoft Visual Basic .NET в данной статье см.
301248.

Версию данной статьи Microsoft Visual C++ .NET см.
815660.
В данной статье относится к следующие пространства имен библиотеки классов Microsoft платформа.NET Framework:

  • System.Data

  • System.Data.SqlClient

Обзор

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

Ключевой частью доступа к данным Microsoft платформа.NET Framework, в объекты DataSet , объектов в памяти, который может содержать таблицы, представления и отношения.

Требования

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

  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server или Microsoft Windows NT 4.0 Server

  • Пример установки базы данных Microsoft SQL Server версии 7.0, Microsoft SQL Server 2000 или Microsoft данных Engine (MSDE) с именем PUBS

  • Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET

Предполагается, что вы знакомы со следующими разделами:

  • Терминология баз данных

  • Язык SQL (SQL)

Способы обновления базы данных из объекта DataSet

В этом разделе показано, как использовать объект DataSet для обновления данных в базе данных. Важно помнить, что также можно использовать объект SqlCommand для вставки, обновления и удаления данных в базе данных непосредственно.

Помогут вам разобраться в данной статье, щелкните следующий номер статьи базы знаний Майкрософт:

Как заполнить объект DataSet из базы данных с помощью .NET C# 314145
Некоторые разделы, которые рассматриваются в
314145 : демонстрируется извлечение данных из базы данных и в DataSetи как набор данных из базы данных, отличный.

После загрузки набора данных , можно изменить данные. Набор данных будет отслеживать эти изменения. Объект DataSet можно считать в памяти кэш данных, полученных из базы данных. Объект DataSet состоит из коллекции таблиц, связей и ограничений.

Чтобы обновить набор данных и отправлять обновления в базу данных, выполните следующие действия.

  1. Запустите Visual Studio 2005 или Visual Studio .NET.

  2. Создайте новое консольное приложение в Visual C#. Visual Studio создает статический класс по умолчанию и пустой процедуре Main() .

  3. Убедитесь в том, что проект содержит ссылку на пространства имен System.Data и системы . Использование инструкции using для пространства имен System.Dataи System.Data.SqlClient системытаким образом, не требуется указывать объявления из этих пространств имен в коде. Необходимо использовать эти инструкции перед всеми остальными объявлениями.

    using System;
    using System.Data;
    using System.Data.SqlClient;
  4. Прежде чем изменять данные и отправить изменения обратно в базу данных, необходимо загрузить данные в набор данных. Подробные инструкции см.
    314145. Чтобы избежать дублирования кода на этом шаге не представлены подробно.

    Строка подключения в следующие кодовые точки для SQL Server, который расположен на локальном компьютере (или компьютера, где выполняется код) для подведения итогов, создается подключение, а затем создается адаптер данных, который используется для заполнения набора данных с данные.
    Примечание. Перед выполнением этого кода необходимо изменить значения, соответствующие < имя_пользователя > и < надежный пароль > пароль. Убедитесь в том, что пользователь имеет соответствующие разрешения на выполнение этой операции в базе данных.

    string sConnectionString;

    // Modify the following string to correctly connect to your SQL Server.
    sConnectionString = "Password=<strong password>;User ID=<username>;"
    + "Initial Catalog=pubs;"
    + "Data Source=(local)";

    SqlConnection objConn
    = new SqlConnection(sConnectionString);
    objConn.Open();

    // Create an instance of a DataAdapter.
    SqlDataAdapter daAuthors
    = new SqlDataAdapter("Select * From Authors", objConn);

    // Create an instance of a DataSet, and retrieve data from the Authors table.
    DataSet dsPubs = new DataSet("Pubs");
    daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
    daAuthors.Fill(dsPubs,"Authors");
  5. Теперь, когда данные загружены, ее можно изменить. Существует много способов добавления строки (или записи). Этот пример кода использует процедуру три шага:

    • Получите новый объект DataRow в DataTable.

    • Задайте необходимые значения полей DataRow .

    • Этот новый объект передается в метод Add коллекции DataTable.Rows .

    Вставьте следующий код после кода на шаге 4:

    //****************
    // BEGIN ADD CODE
    // Create a new instance of a DataTable.
    DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];

    DataRow drCurrent;
    // Obtain a new DataRow object from the DataTable.
    drCurrent = tblAuthors.NewRow();

    // Set the DataRow field values as necessary.
    drCurrent["au_id"] = "993-21-3427";
    drCurrent["au_fname"] = "George";
    drCurrent["au_lname"] = "Johnson";
    drCurrent["phone"] = "800 226-0752";
    drCurrent["address"] = "1956 Arlington Pl.";
    drCurrent["city"] = "Winnipeg";
    drCurrent["state"] = "MB";
    drCurrent["contract"] = 1;

    // Pass that new object into the Add method of the DataTable.
    tblAuthors.Rows.Add(drCurrent);
    Console.WriteLine("Add was successful, Click any key to continue!!");
    Console.ReadLine();

    // END ADD CODE
  6. Чтобы изменить существующие строки, получить соответствующий объект DataRow и введите новые значения для одного или нескольких столбцов. Сначала необходимо найти правильный строки становится значительно проще, так как загрузить схему таблицы, а также данные (вызов FillSchema на шаге 4). Со схемой в месте таблице знает, какой столбец является первичным ключом, и метод поиска коллекции строк доступна.

    Метод поиска возвращает объект DataRow с определенным значением в его первичного ключа (в данном случае au_id). После, DataRow, можно изменить столбцы. Нет необходимости переносить изменения в BeginEdit и EndEdit, но это упрощает работу, что DataSet приходится делать и позволяет одновременно выполнять его проверку при EndEdit набора данных вызывается. Вставьте следующий код после кода добавить:

    //*****************
    // BEGIN EDIT CODE

    drCurrent = tblAuthors.Rows.Find("213-46-8915");
    drCurrent.BeginEdit();
    drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
    drCurrent.EndEdit();
    Console.WriteLine("Record edited successfully, Click any key to continue!!");
    Console.ReadLine();

    // END EDIT CODE
  7. Чтобы обновить исходную базу данных со всеми этими изменениями, передайте набор данных в метод Update объекта DataAdapter .

    Тем не менее перед вызовом Update, необходимо задать свойства InsertCommand, UpdateCommandи DeleteCommand объекта DataAdapter . Можно вручную написать SQL и заполнить эти три свойства соответствующие объекты SqlCommand , но Visual Studio .NET можно использовать также для автоматического создания этих команд.

    Чтобы создать требуемые команды, при необходимости, необходимо создать экземпляр объекта SqlCommandBuilder и в конструкторе с помощью объекта DataAdapter . Если вы хотите использовать этот метод, который показан в образце кода для выполнения, необходимо иметь сведения о первичных ключах доступны для таблицы. Чтобы открыть сведения о первичном ключе, вызова FillSchemaи установите свойство MissingSchemaAction вашей DataAdapter AddWithKeyили вручную задать первичный ключ в коде. После РЕДАКТИРОВАНИЯ кода вставьте следующий код:

    //*****************
    // BEGIN SEND CHANGES TO SQL SERVER

    SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();

    // END SEND CHANGES TO SQL SERVER
  8. Чтобы полностью удалить строку, используйте метод Delete объект DataRow . Обратите внимание, что набор строк содержит два метода удаления и RemoveAt, которые кажется, что удалить строку, но вместо удаления строки из коллекции. Только метод Delete отправляет удаления базы данных-источника. Вставьте следующий код после кода отправки ИЗМЕНЕНИЙ в SQL SERVER:

    //*****************
    //BEGIN DELETE CODE

    drCurrent = tblAuthors.Rows.Find("993-21-3427");
    drCurrent.Delete();
    Console.WriteLine("Record deleted successfully, Click any key to continue!!");
    Console.ReadLine();

    //END DELETE CODE
  9. Отправьте изменения в SQL Server для удаления записи, который был добавлен ранее. Вставьте следующий код после кода удаления:

    //*****************
    // CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
  10. Сохраните проект.

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

Полный пример кода

using System;
using System.Data;
using System.Data.SqlClient;

namespace PopulateDataSet
{

/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
string sConnectionString;

// Modify the following string to correctly connect to your SQL Server.
sConnectionString = "Password=;User ID=sa;"
+ "Initial Catalog=pubs;"
+ "Data Source=(local)";

SqlConnection objConn
= new SqlConnection(sConnectionString);
objConn.Open();

// Create an instance of a DataAdapter.
SqlDataAdapter daAuthors
= new SqlDataAdapter("Select * From Authors", objConn);

// Create an instance of a DataSet, and retrieve
// data from the Authors table.
DataSet dsPubs = new DataSet("Pubs");
daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
daAuthors.Fill(dsPubs,"Authors");
//****************
// BEGIN ADD CODE
// Create a new instance of a DataTable.
DataTable tblAuthors;
tblAuthors = dsPubs.Tables["Authors"];

DataRow drCurrent;
// Obtain a new DataRow object from the DataTable.
drCurrent = tblAuthors.NewRow();

// Set the DataRow field values as necessary.
drCurrent["au_id"] = "993-21-3427";
drCurrent["au_fname"] = "George";
drCurrent["au_lname"] = "Johnson";
drCurrent["phone"] = "800 226-0752";
drCurrent["address"] = "1956 Arlington Pl.";
drCurrent["city"] = "Winnipeg";
drCurrent["state"] = "MB";
drCurrent["contract"] = 1;

// Pass that new object into the Add method of the DataTable.
tblAuthors.Rows.Add(drCurrent);
Console.WriteLine("Add was successful, Click any key to continue!!");
Console.ReadLine();

// END ADD CODE
//*****************
// BEGIN EDIT CODE

drCurrent = tblAuthors.Rows.Find("213-46-8915");
drCurrent.BeginEdit();
drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
drCurrent.EndEdit();
Console.WriteLine("Record edited successfully, Click any key to continue!!");
Console.ReadLine();

// END EDIT CODE
//*****************
// BEGIN SEND CHANGES TO SQL SERVER

SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
daAuthors.Update(dsPubs, "Authors");
Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
Console.ReadLine();

// END SEND CHANGES TO SQL SERVER
//*****************
//BEGIN DELETE CODE

drCurrent = tblAuthors.Rows.Find("993-21-3427");
drCurrent.Delete();
Console.WriteLine("SRecord deleted successfully, Click any key to continue!!");
Console.ReadLine();

//END DELETE CODE
//*****************
// CLEAN UP SQL SERVER
daAuthors.Update(dsPubs, "Authors");
Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
Console.ReadLine();

}
}
}

Ссылки

Дополнительные сведения об использовании ADO.NET DataSet объектов и SQL, посетите следующие веб-узлы корпорации Майкрософт:

Углубляться в доступ к данным (столбец Голоса MSDN )
http://msdn2.microsoft.com/en-us/library/ms810288.aspx

ADO.NET для программиста ADO
http://msdn.microsoft.com/en-us/library/ms973217.aspx

Центр разработчиков MSDN Online .NET
http://msdn2.microsoft.com/en-us/netframework/default.aspx

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?

Спасибо за ваш отзыв!

×