Способы обновления базы данных из объекта DataSet с помощью Visual C# .NET или Visual C# 2005

Переводы статьи Переводы статьи
Код статьи: 307587 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

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

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

Требования

В следующем списке представлены рекомендуемое оборудование, программное обеспечение, сетевая инфраструктура и пакеты обновления, которые будут необходимы.
  • Microsoft Windows Server 2003, 2000Professional Microsoft Windows, Microsoft Windows 2000 Server, Microsoft Windows NT 4.0 Server или Microsoft Windows 2000 AdvancedServer
  • Microsoft SQL Server версии 7.0, Microsoft SQL Server2000 или Microsoft данных Engine (MSDE) с именем PUBS образец databaseinstalled
  • Microsoft Visual Studio 2005 или Microsoft Visual Studio.NET
Предполагается, что вы знакомы со следующими темами:
  • Терминология баз данных
  • Язык SQL (SQL)

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

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

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

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

Чтобы обновить набор данных и отправлять обновления в базу данных, выполните следующие действия.
  1. Запустите Visual Studio 2005 или Visual Studio .NET.
  2. Создайте новое консольное приложение в Visual C#. VisualStudio создает статический класс по умолчанию и пустой процедуре Main() .
  3. Убедитесь в том, что проект содержит ссылку на пространства имен System.Data и системы . Использование инструкции using для пространства имен System.Dataи System.Data.SqlClientсистемытаким образом, не требуется определять эти пространства имен в коде declarationsfrom. Необходимо использовать эти операторы priorto всеми остальными объявлениями.
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  4. Прежде чем изменять данные и отправить backto изменения базы данных, необходимо загрузить данные в набор данных. Подробные инструкции см.314145. Чтобы избежать дублирования кода в эту stepis, не представлены в данных.

    Строка подключения в пунктах followingcode для SQL Server, расположенный на локальном компьютере (или thecomputer, в котором выполняется код) для обобщения, создается подключение, andthen адаптер данных создается подключение, которое используется для заполнения набора данных данными.
    Примечание Перед выполнением этого кода необходимо изменить правильные значения <username>и<strongpassword> пароль. Убедитесь, что идентификатор thatUser, имеет соответствующие разрешения на выполнение этой операции, на что.</strongpassword> </username>
    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. Теперь, когда данные загружены, ее можно изменить. Там aremany способы добавления строки (или записи). В этом примере кода используются три stepprocedure:
    • Получите новый объект 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 и введите новые значения для одного или нескольких столбцов. Youmust сначала найти правильные строки гораздо проще, поскольку загружается theschema таблицы, а также данные (вызов FillSchema на шаге 4). Таблицы со схемой, в месте, знает, whichcolumn является первичным ключом, и метод поиска коллекции строк доступна.

    Метод поиска возвращает объект DataRow с определенным значением в его первичного ключа (в данном случае au_id). После, DataRow, можно изменить столбцы. Themodifications в 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 и заполнить эти threeproperties с соответствующие объекты SqlCommand , но также можно использовать Visual Studio .NET для трех команд generatethese автоматически.

    Чтобы создать необходимые commandswhen, когда они потребуются, необходимо создать экземпляр объекта SqlCommandBuilder и в конструкторе с помощью объекта DataAdapter . Если вы хотите использовать этот метод в примере кода, чтобы понять, какие isillustrated должен иметь informationavailable первичного ключа для таблицы. Чтобы открыть сведения о первичном ключе, вызова FillSchemaи установите свойство MissingSchemaAction вашей DataAdapterAddWithKeyили вручную задать первичный ключ в коде. Вставьте код экран после РЕДАКТИРОВАНИЯ кода.
    //*****************
    // 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, которые кажутся удалить строку, но вместо удаления коллекции rowfrom. Только метод Delete отправляет удаления базы данных-источника. Вставьте код экран после отправки ИЗМЕНЕНИЙ на сервер SQL-кода.
    //*****************
    //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 для удаления thatyou запись, добавленную ранее. После удаления кода вставьте следующий код:
    //*****************
    // CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
    					
  10. Сохраните проект.
  11. В меню Отладка нажмите кнопку Пуск для запуска проекта. Обратите внимание, что отображается несколько окон сообщений, Показать ход выполнения кода и позволяют просматривать currentstate данных в ходе выполнения кода.

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

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

Свойства

Код статьи: 307587 - Последний отзыв: 29 октября 2013 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Ключевые слова: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB307587 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 307587

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com