Jak aktualizovat databázi z objektu DataSet pomocí Visual C# 2005 nebo Visual C# .NET

Microsoft Visual Basic .NET verzi tohoto článku naleznete v tématu
301248 .
Microsoft Visual C++ .NET verzi tohoto článku naleznete v tématu
815660 .

Tento článek se týká následujících oborů názvů knihovny tříd rozhraní.NET Framework společnosti Microsoft:
  • System.Data
  • System.Data.SqlClient

Souhrn

Tento článek ukazuje, jak převzít objekt DataSet , který obsahuje data (která je načtena z databáze), úprava dat a odeslání zpět do databáze k aktualizaci původního zdroje.

Objekt DataSet objekty, klíčovou součástí přístupu k datům v Microsoft rozhraní.NET Framework, jsou objekty v paměti, které mohou obsahovat tabulky, zobrazení a vztahy.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack, které potřebujete:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server nebo Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server verze 7.0, Microsoft SQL Server 2000 nebo Microsoft Data Engine (MSDE) s PUBS ukázkové databáze nainstalována
  • Microsoft Visual Studio 2005 nebo Microsoft Visual Studio .NET
Tento článek předpokládá, že jste obeznámeni s následující témata:
  • Databázové terminologii
  • Structured Query Language (SQL)

Jak aktualizovat databázi z objektu DataSet

Tento oddíl ukazuje, jak aktualizovat data v databázi pomocí objektu DataSet . Je důležité mít na paměti, že můžete také použít SqlCommand objekt vložit, aktualizovat a odstranit data v databázi přímo.

Abyste lépe pochopili Tento článek, klepněte na následující číslo článku znalostní báze Microsoft Knowledge Base:
314145 jak naplnit objekt DataSet z databáze pomocí Visual C# .NET
Některá z témat, které jsou uvedeny v
314145 zahrnují jak načíst data z databáze a do objektu DataSeta jak objekt DataSet je samostatná a oddělená od databáze.

Po načtení objektu DataSet , můžete data upravit. Tyto změny budou sledovat objekt DataSet . Objekt DataSet lze považovat nediskové mezipaměti dat, která je načtena z databáze. Objekt DataSet se skládá z kolekce tabulek, relace a omezení.

Chcete-li aktualizovat DataSet a odeslat aktualizace databáze, postupujte takto:
  1. Spusťte aplikaci Visual Studio 2005 nebo Visual Studio .NET.
  2. Vytvoření nové aplikace konzoly v jazyce Visual C#. Visual Studio vytvoří statické třídy a prázdné procedury Main() .
  3. Ujistěte se, zda projekt obsahuje odkaz na systém a System.Data obory názvů. Použijte příkaz pomocí na systémy, System.Dataa System.Data.SqlClient obory názvů, takže není nutné kvalifikovat deklarace z těchto oborů názvů později v kódu. Musíte použít tyto příkazy před všemi ostatními deklaracemi.
    using System;using System.Data;
    using System.Data.SqlClient;

  4. Dříve než můžete změnit data a odeslat změny zpět do databáze, je nutné načíst informace do DataSet. Podrobný postup naleznete v tématu
    314145 . aby k duplikaci nedošlo, není podrobně uvedeny kód v tomto kroku.

    Připojovací řetězec v kódu následující body k serveru SQL Server, který je umístěn na místním počítači (nebo počítače, kde je spuštěn kód) sumarizovat, připojení je vytvořen a pak datový adaptér je vytvořen, který je použit k vyplnění objektu DataSet s daty.
    Poznámka: Je nutné změnit ID uživatele < uživatelské_jméno > a < silné heslo > heslo na správné hodnoty před spuštěním tohoto kódu. Zkontrolujte, zda ID uživatele má příslušná oprávnění k provedení této operace na databázi.
    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. Nyní, načtení dat, můžete ji upravit. Existuje mnoho způsobů, jak přidat řádek (nebo záznamu). Tento příklad kódu používá tři kroku postupu:
    • Získejte nový objekt DataRow z objektu DataTable.
    • Podle potřeby nastavte hodnoty pole DataRow .
    • Tento nový objekt předáte do metody Add kolekce DataTable.Rows .
    Vložte následující kód po kódu v kroku 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. Chcete-li upravit existující řádky, získat odpovídající DataRow objekt a potom zadejte nové hodnoty pro jeden nebo více sloupců. Nejprve musíte najít správný řádek, který je mnohem jednodušší, protože načíst schéma tabulky, jakož i data (volání FillSchema v kroku 4). S tímto schématem na místě v tabulce ví, který sloupec je primární klíč a Najít metodu kolekce řádků je k dispozici.

    Najít metoda vrátí objekt DataRow s určitou hodnotu v jeho primární klíč (v tomto případě au_id). Po který objekt DataRow, můžete upravit sloupce. Není nutné zalomit BeginEdit , a EndEditzměny, ale to zjednodušuje práci, že DataSet musí provést a umožňuje DataSet své ověřovací kontroly současně provádět při volání EndEdit . Vložte následující kód po kódu přidat:
    //*****************// 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. Původní databáze aktualizovat všechny tyto změny, předáte do metody Update DataAdapter objektu DataSet .

    Než budete moci volat Update, však musí nastavit událost InsertCommand, UpdateCommanda DeleteCommand vlastnosti DataAdapter objektu. Ruční zápis SQL a naplnit tyto tři vlastnosti s odpovídající objekty SqlCommand , ale Visual Studio .NET můžete také použít tyto tři příkazy generovat automaticky.

    Generovat požadované příkazy když jsou potřeba, musíte vytvořit instanci SqlCommandBuilder objekt a použijte DataAdapter v konstruktoru. Pokud chcete použít tuto metodu, která je znázorněna v ukázce kódu dodržovat, musí mít primární klíče informace k dispozici pro tabulku. Chcete-li získat přístup k informace o primárním klíči, volání FillSchemaa nastavte MissingSchemaAction vlastnost DataAdapter vaše k AddWithKeynebo primární klíč nastavit ručně v kódu. Vložte následující kód po kódu úpravy:
    //*****************// 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. Řádek zcela odstranit, použijte metodu Delete objektu DataRow . Všimněte si, že kolekce řádků obsahuje dvě metody Odebrat a RemoveAt, které se zdají odstraníte řádek, ale místo toho pouze odebrat řádek z kolekce. Pouze metodu Delete odstranění odešle zpět do zdrojové databáze. Vložte následující kód po kódu odeslat změny na serveru 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. Odešlete změny na serveru SQL Server Chcete-li odstranit záznam, který jste přidali dříve. Po odstranění kódu vložte následující kód:
    //*****************// CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();

  10. Uložte projekt.
  11. V nabídce Debug klepněte na tlačítko Start ke spuštění projektu. Všimněte si, že se zobrazí několik oken zpráv, určení průběhu kód, který umožňuje zobrazit aktuální stav dat v průběhu kódu.

Úplný výpis kódu

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();

}
}
}

Odkazy

Další informace o použití rozhraní ADO.NET DataSet objekty a SQL, naleznete na následujících webech společnosti Microsoft:
Začte přístup k datům (sloupec Hlasy MSDN )
http://msdn2.microsoft.com/en-us/library/ms810288.aspx
Technologie ADO.NET pro rozhraní ADO Programmer
http://msdn.microsoft.com/en-us/library/ms973217.aspx
Vlastnosti

ID článku: 307587 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor