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

Překlady článku Překlady článku
ID článku: 815660 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek ukazuje, jak převzít DataSet obsahuje data (který je načten z databáze), jak upravit data a potom jak odeslat do databáze aktualizovat původní zdroj.

Objektech DataSet klíče část přístup k datům v Microsoft .NET Framework jsou objekty v paměti, který může pojmout tabulek, zobrazení a vztahy.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a požadované aktualizace Service Pack:
  • Jeden z následujících: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server nebo Microsoft Windows NT 4.0 Server
  • Jeden z následujících: Microsoft SQL Server verze 7.0, Microsoft SQL Server 2000 nebo Microsoft Data Engine (MSDE) s ukázkové databáze PUBS nainstalován s odpovídající oprávnění, UserID a heslo hodnoty.
  • Microsoft Visual Studio .NET nebo Microsoft Visual Studio 2005,
Tento článek předpokládá znalost následujících témat:
  • Terminologie databáze
  • Strukturovaný dotazovací jazyk (SQL)


Jak aktualizovat databáze z objektu DataSet

Tento oddíl demonstruje aktualizace dat v databázi pomocí objektu DataSet.

Důležité: Pomocí objektu SqlCommand také můžete vložit, aktualizovat a odstranit data v databázi přímo.

Po načtení DataSet můžete data upravit. Tyto změny budou sledovat DataSet. Objekt DataSet lze považovat za mezipaměti v paměti dat načtených z databáze. Objekt DataSet se skládá z kolekce tabulek, relace a omezení.

Chcete-li aktualizaci DataSet a odeslat tyto aktualizace databáze, postupujte takto:
  1. Otevřete Microsoft Visual Studio .NET nebo Microsoft Visual Studio 2005.
  2. Vytvoření nové Aplikace Managed C++ v Visual C++ .NET. Visual Studio vytvoří main() funkce. Odebrat z funkce main() generovaný kód.
  3. Přidat odkaz na systém a System.data obory názvů, přidejte následující kód
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Použít příkaz USING na systémy, System.data a 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 deklaracemi.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Před změnit data a odeslat změny zpět do databáze, musí načíst informace do DataSet.

    Řetězec připojení v následujícím kódu bodů na SQL Server, který je umístěn na místním počítači (nebo počítače, ve kterém je spuštěn kód). Nahradit tento řetězec vlastní nastavení.

    Sumarizovat, vytvoří připojení a potom adaptér dat je vytvořen, která se používá pro výplň DataSet s daty.
    SqlConnection  *objConn;
    String *sConnectionString;
    sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";
    
    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");
    
    Poznámka je třeba přidat společného jazykového modulu runtime podporují možnost kompilátoru (/ clr:oldSyntax) v Visual C++ 2005 úspěšně zkompilovat předchozí ukázkový kód. Přidat běžné podporu kompilátor možnost runtime jazyka Visual C++ 2005, postupujte takto:
    1. Klepněte na tlačítko projekt a klepněte na tlačítko <ProjectName> Vlastnosti.

      Poznámka:<ProjectName> je zástupný název projektu.
    2. Rozbalte položku Konfigurace vlastnosti a potom klepněte na položku Obecné.
    3. Klepnutím vyberte Common Language Runtime podpory, staré syntaxe (/ clr:oldSyntax) v podporují Common Language Runtime projektu nastavení v pravém podokně, klepněte na tlačítko použít a potom klepněte na tlačítko OK.
    Další informace o společného jazykového modulu runtime podporují možnost kompilátoru naleznete na následujícím webu:
    / clr (Common Language Runtime kompilace)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Tyto kroky platí pro celý článek.
  6. Nyní, načtení dat můžete upravit. Přidání řádku (nebo záznamu) mnoha způsoby. Tento ukázkový kód používá tři krok postupu:
    1. Získat nový objekt DataRowDataTable.
    2. Podle potřeby nastavte hodnoty pole DataRow.
    3. Nový objekt předat do metody Add kolekce DataTable.Rows.

    Po kódu v kroku 5 vložte následující kód:
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
    
    
    // Obtain a new DataRow object from the DataTable.
    DataRow* drCurrent = tblAuthors->NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent->set_Item("au_id",new String("993-21-3427"));
    
    drCurrent->set_Item("au_fname",new String("George"));
    drCurrent->set_Item("au_lname",new String("Johnson"));
    drCurrent->set_Item("phone",new String("800 226-0752"));
    drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
    drCurrent->set_Item("city", new String("Winnipeg"));
    drCurrent->set_Item("state", new String("MB"));
    drCurrent->set_Item("contract",__box(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  
    
  7. Upravit existující řádky získat příslušný objekt DataRow a zadat nové hodnoty pro jeden nebo více sloupců. Nejprve musíte najít správný řádek je mnohem jednodušší, protože načíst schéma tabulky stejně jako data (volání FillSchema v kroku 5). S tímto schématem tabulce ví, který sloupec je primární klíč a metoda Najít kolekce řádků je k dispozici.

    Metoda hledání vrátí objekt DataRow s určitou hodnotu v jeho primárního klíče (v tomto případě au_id). Po, které máte DataRow, můžete změnit sloupce. Nemáte změny v BeginEdit a EndEdit zalomit, ale to zjednodušuje práci, DataSet obsahuje provést a umožňuje DataSet současně provádět kontroly jeho ověření při volání EndEdit.

    Vložte následující kód po kódu v kroku 6:
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
    drCurrent->BeginEdit();
    
    drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
    drCurrent->EndEdit ();
    Console::WriteLine("Record edited successfully, Click any key to continue!!");
    Console::ReadLine();
    
    // END EDIT CODE
    
  8. Chcete-li původní databáze aktualizovat všechny tyto změny, předat do metody Update objekt DataAdapterDataSet.

    Než zavoláte Update, musíte nastavit vlastnosti InsertCommand, vlastnost UpdateCommand a událost DeleteCommand objekt DataAdapter. Ručně zapsat SQL a naplnit tyto tři vlastnosti s odpovídající SqlCommand objekty, ale Visual Studio .NET můžete také použít tyto tři příkazy generovat automaticky.

    Při jejich nutné generovat požadované příkazy, musíte vytvořit instanci objektu SqlCommandBuilder a použít DataAdapter v konstruktoru. Chcete-li použít tuto metodu (zobrazené v následující ukázce kódu) musí mít primární klíče informace k dispozici pro tabulku. Přístup k informace o primárním klíči, volání FillSchema a poté nastavte vlastnost MissingSchemaAction vaše DataAdapter AddWithKey nebo primární klíč nastavit ručně v kódu.

    Vložte následující kód po kód kroku 7.
    // 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 
    
  9. Řádek zcela odstranit, použijte metodu Odstranit objekt DataRow.

    Poznámka: Kolekce řádků obsahuje dvě metody, Odebrat a RemoveAt které zdánlivě odstraníte řádek, ale místo toho stačí odebrat řádek, z kolekce. Pouze metodu Odstranit odešle vaše odstranění zpět zdrojové databáze.

    Vložte následující kód po kódu v kroku 8:
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
    drCurrent->Delete();
    Console::WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console::ReadLine();
    
    //END DELETE CODE  
    
  10. Odeslat změny na SQL Server odebrat záznam dříve přidány.

    Vložte následující kód po kódu v kroku 9:
    // CLEAN UP SQL SERVER
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    objConn->Close ();
    
  11. Uložit projekt.
  12. V nabídce Debug klepněte na tlačítko Start spustit projektu.

    Všimněte si, že se zobrazí několik oken zpráv, které označit průběh kód a povolit zkontrolovat aktuální stav dat průběhu kód.


Úplný výpis kódu

// This is the main project file for VC++ application project 
// generated using an Application Wizard.

#include "stdafx.h"

#using <mscorlib.dll>
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.dll>
#include <tchar.h>

using namespace System;
using namespace System::Xml;
using namespace System::Data;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection  *objConn;
    try
    {
        String *sConnectionString;
        sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";

        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 = dsPubs->Tables->Item["Authors"];


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

        // Set the DataRow field values as necessary.
        drCurrent->set_Item("au_id",new String("993-21-3427"));

        drCurrent->set_Item("au_fname",new String("George"));
        drCurrent->set_Item("au_lname",new String("Johnson"));
        drCurrent->set_Item("phone",new String("800 226-0752"));
        drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
        drCurrent->set_Item("city", new String("Winnipeg"));
        drCurrent->set_Item("state", new String("MB"));
        drCurrent->set_Item("contract",__box(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(new String("213-46-8915"));
        drCurrent->BeginEdit();

        drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->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(new String("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();
    }
    catch (Exception* ex)
    {
        Console::WriteLine (ex->Message );
    }
    __finally
    {
        objConn->Close ();
    }
}


Odkazy

Další informace o použití ADO.NET DataSet objekty a SQL, navštivte následující weby:

Vlastnosti

ID článku: 815660 - Poslední aktualizace: 19. března 2007 - Revize: 5.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Klíčová slova: 
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:815660

Dejte nám zpětnou vazbu

 

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