Come aggiornare un database da un oggetto DataSet utilizzando Visual c ++ .NET o Visual c ++ 2005

Traduzione articoli Traduzione articoli
Identificativo articolo: 815660 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene illustrato come richiedere un DataSet che contiene dati (che viene caricati da un database), come modificare i dati e modalitÓ di invio del database per aggiornare l'origine.

oggetti di DataSet , componenti importanti dell'accesso ai dati in Microsoft .NET Framework, sono oggetti in memoria che possono contenere tabelle, visualizzazioni e relazioni.

Requisiti

Nell'elenco seguente sono indicati hardware, software, infrastruttura di rete e i service pack Ŕ necessario:
  • Uno dei seguenti: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server o Microsoft Windows NT 4.0 Server
  • Uno dei seguenti: Microsoft SQL Server versione 7.0, Microsoft SQL Server 2000 o Microsoft Data Engine (MSDE) con il database di esempio PUBS installato con autorizzazioni appropriate, ID utente e password di valori.
  • Microsoft Visual Studio .NET o Microsoft Visual Studio 2005
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Terminologia di database
  • (SQL) Structured Query Language


Come aggiornare un database da un oggetto DataSet

In questa sezione viene illustrato come utilizzare l'oggetto DataSet per aggiornare i dati in un database.

importante ╚ inoltre possibile utilizzare un oggetto SqlCommand per inserire, aggiornare ed eliminare direttamente i dati in un database.

Dopo aver caricato il DataSet , Ŕ possibile modificare i dati. Il DataSet tiene traccia di queste modifiche. L'oggetto DataSet pu˛ essere considerato una cache di in memoria dei dati recuperati da un database. L'oggetto DataSet Ŕ costituito da un insieme di tabelle, relazioni e vincoli.

Per aggiornare un DataSet e inviare gli aggiornamenti al database, attenersi alla seguente procedura:
  1. Aprire Microsoft Visual Studio .NET o Microsoft Visual Studio 2005.
  2. Creare una nuova Applicazione c ++ gestita in Visual c ++. NET. VerrÓ creata una funzione main() . Rimuovere qualsiasi codice generato dalla funzione main() .
  3. Per aggiungere un riferimento agli spazi dei nomi System e System.Data , aggiungere il seguente codice
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Utilizzare l'istruzione di USING sugli spazi dei nomi System , System.Data e System.Data.SqlClient , in modo che non sia necessario qualificare dichiarazioni provenienti da questi spazi dei nomi pi¨ avanti nel codice. ╚ necessario utilizzare queste istruzioni prima di qualsiasi altra dichiarazione.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Prima di poter modificare i dati e rinviare le modifiche al database, Ŕ necessario caricare le informazioni nel DataSet .

    La stringa di connessione nel codice riportato di seguito fa riferimento a un server SQL che si trova su computer locale (o il computer in cui Ŕ in esecuzione il codice). Sostituire questa stringa con le proprie impostazioni.

    Per riepilogare, viene creata una connessione e quindi viene creato un adattatore dati, che viene utilizzato per riempire il DataSet con i dati.
    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");
    
    Nota ╚ necessario aggiungere il common language runtime supporta (opzione del compilatore) (/ CLR: oldSyntax) in Visual c ++ 2005 per compilare correttamente l'esempio di codice precedente. Per aggiungere il compilatore opzione supporto common language runtime in Visual c ++ 2005, attenersi alla seguente procedura:
    1. Fare clic su progetto e quindi scegliere <ProjectName> proprietÓ .

      Nota <ProjectName> Ŕ un segnaposto per il nome del progetto.
    2. Espandere la ProprietÓ di configurazione e quindi fare clic su Generale .
    3. Fare clic per selezionare supporto Common Language Runtime, vecchia sintassi (/ CLR: oldSyntax) nell'impostazione progetto supporto Common Language Runtime nel riquadro di destra, fare clic su Applica e scegliere OK .
    Per ulteriori informazioni su common language runtime supporta (opzione del compilatore), visitare il seguente sito Web Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Valida per l'intero articolo.
  6. Ora che i dati sono stati caricati Ŕ possibile modificarli. Esistono diversi modi per aggiungere una riga o record. In questo esempio viene utilizzata una tre-procedura del passaggio:
    1. Consente di ottenere un nuovo oggetto DataRow da DataTable .
    2. Impostare i valori del campo DataRow secondo necessitÓ.
    3. Passare al metodo Add dell'insieme DataTable.Rows il nuovo oggetto.

    Incollare il codice seguente dopo il codice nel passaggio 5:
    // 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. Per modificare le righe esistenti, ottenere l'oggetto DataRow corretto e quindi fornire nuovi valori per una o pi¨ colonne. ╚ innanzitutto necessario individuare la riga corretta, Ŕ molto pi¨ semplice poichÚ Ŕ caricato lo schema della tabella, nonchÚ i dati (la chiamata a FillSchema nel passaggio 5). Con lo schema posto, la tabella viene identificata la colonna chiave primaria che costituisce e il metodo Find dell'insieme Rows Ŕ disponibile.

    Il metodo Find restituisce l'oggetto DataRow con un valore specifico nella chiave primaria (in questo caso au_id). Dopo aver che DataRow , Ŕ possibile modificare le colonne. Non Ŕ necessario includere le modifiche in BeginEdit ed EndEdit , ma ci˛ semplifica il lavoro che il DataSet Ŕ e consente il DataSet di eseguire contemporaneamente i controlli di convalida quando viene chiamato EndEdit .

    Incollare il codice seguente dopo il codice nel passaggio 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. Per aggiornare il database originale con tutte le modifiche, passare il DataSet al metodo Update dell'oggetto DataAdapter .

    Tuttavia, prima di chiamare Update , Ŕ necessario impostare la proprietÓ InsertCommand , UpdateCommand e DeleteCommand dell'oggetto DataAdapter . ╚ possibile manualmente scrivere SQL e popolare queste tre proprietÓ con oggetti SqlCommand corrispondenti, ma Ŕ inoltre possibile utilizzare Visual Studio .NET per generare automaticamente i tre comandi.

    Per generare i comandi obbligatori quando sono necessari, Ŕ necessario creare un'istanza dell'oggetto SqlCommandBuilder e utilizzare il DataAdapter nel costruttore. Se si desidera utilizzare questo metodo (illustrato nell'esempio di codice che segue), Ŕ necessario disponibili le informazioni della chiave primaria per la tabella. Per accedere alle informazioni di chiave primaria, chiamare FillSchema e quindi impostare la proprietÓ MissingSchemaAction di DataAdapter su AddWithKey oppure impostare la chiave primaria manualmente nel codice.

    Incollare il codice seguente dopo il codice nel passaggio 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. Per eliminare una riga completamente, Ŕ necessario utilizzare il metodo Delete dell'oggetto DataRow .

    Nota L'insieme di righe contiene due metodi, Remove e RemoveAt , che sembrano eliminare la riga ma invece semplicemente rimuovere la riga dall'insieme. Solo il metodo di eliminazione invia l'eliminazione al database di origine.

    Incollare il codice seguente dopo il codice nel passaggio 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. Inviare le modifiche a SQL Server per rimuovere il record aggiunto in precedenza.

    Incollare il codice seguente dopo il codice nel passaggio 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. Salvare il progetto.
  12. Dal menu debug , scegliere Avvia per eseguire il progetto.

    Si noti che vengono visualizzate varie finestre di messaggio che indicano come procede l'esecuzione del codice e consentono di ricontrollare lo stato corrente dei dati man mano che l'esecuzione procede.


Elenco completo del codice

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


Riferimenti

Per ulteriori informazioni sull'utilizzo di ADO.NET, gli oggetti DataSet e SQL, visitare i seguenti siti Web Microsoft:

ProprietÓ

Identificativo articolo: 815660 - Ultima modifica: lunedý 19 marzo 2007 - Revisione: 5.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Chiavi:á
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 815660
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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