Aggiornamento di un database da un oggetto DataSet utilizzando Visual C# 2005 or Visual C# .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 307587 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato precedentemente pubblicato con il codice di riferimento I307587
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene descritto in dettaglio come utilizzare un oggetto DataSet contenente dati caricati da un database, modificare i dati e rinviarli al database per aggiornare l'origine iniziale.

Gli oggetti DataSet, una parte fondamentale dell'accesso ai dati in Microsoft .NET Framework, sono oggetti residenti in memoria in grado di contenere tabelle, viste e relazioni.

Requisiti

Nell'elenco che segue sono indicati l'hardware, il software, l'infrastruttura di rete e i service pack necessari:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server o Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server versione 7.0, Microsoft SQL Server 2000 oppure Microsoft Data Engine (MSDE), con installato il database di esempio PUBS
  • Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Terminologia di database
  • Linguaggio SQL (Structured Query Language)

Aggiornamento di un database da un oggetto DataSet

In questa sezione viene spiegato come utilizzare l'oggetto DataSet per aggiornare i dati contenuti in un database. ╚ importante ricordare che Ŕ possibile anche utilizzare un oggetto SqlCommand per inserire, aggiornare ed eliminare direttamente i dati del database.

Per comprendere meglio quanto descritto in questo articolo, fare clic sul numero dell'articolo della Knowledge Base riportato di seguito:
314145 Come popolare un oggetto DataSet da un database utilizzando Visual Basic .NET
Alcuni argomenti pertinenti si trovano anche nell'articolo 314145, tra cui informazioni su come recuperare dati da un database e in un oggetto DataSet, nonchÚ informazioni su come DataSet sia separato e distinto dal database.

Dopo il caricamento di DataSet Ŕ possibile modificare i dati. L'oggetto DataSet memorizzerÓ le modifiche. Questo oggettopu˛ essere considerato una cache residente in memoria dei dati recuperati da un database edŔ costituito da un insieme di tabelle, relazioni e vincoli.

Per aggiornare un oggetto DataSet e rinviare gli aggiornamenti al database, attenersi alla seguente procedura:
  1. Avviare Visual Studio 2005 o Visual Studio .NET.
  2. Creare una nuova applicazione console in Visual C#. Per impostazione predefinita verrÓ creata una classe Static e una routine Main() vuota.
  3. Verificare che il progetto contenga un riferimento agli spazi dei nomi System e System.Data. Utilizzare l'istruzione using sugli spazi dei nomi System, System.Data e System.Data.SqlClient, in modo che in seguito non sia pi¨ necessario qualificare le dichiarazioni provenienti da questi spazi dei nomi nel codice. Queste istruzioni devono essere utilizzate prima di qualunque altra dichiarazione.
    using System; 
    using System.Data; 
    using System.Data.SqlClient;
  4. Prima di poter modificare i dati e rinviare le modifiche al database Ŕ necessario caricare le informazioni nel DataSet. Per la procedura dettagliata, vedere l'articolo 314145. Per evitare duplicazioni il codice di questo passaggio non Ŕ riportato in dettaglio.

    La stringa di connessione del codice riportato di seguito si riferisce a SQL Server installato nel computer locale o nel computer in cui Ŕ in esecuzione il codice. In breve, vengono creati una connessione e un adattatore dei dati, utilizzato per inserire dati in DataSet.
    Nota ╚ necessario modificare l'ID utente <username> e la password=<strong password> con i valori corretti prima di eseguire il codice. Assicurarsi che l'ID utente disponga delle autorizzazioni appropriate per effettuare questa operazione nel database.
    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. Ora che i dati sono stati caricati Ŕ possibile modificarli. Esistono diversi modi per aggiungere una riga o record. Nell'esempio di codice seguente viene utilizzata una procedura in tre passaggi:
    • Ottenere un nuovo oggetto DataRow da DataTable.
    • Impostare i valori del campo DataRow nel modo appropriato.
    • Passare il nuovo oggetto al metodo Add dell'insieme DataTable.Rows.
    Incollare il seguente codice dopo il passaggio 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. Per modificare le righe esistenti ottenere l'oggetto DataRow corretto e fornire nuovi valori per una o pi¨ colonne. ╚ necessario individuare la riga corretta, un processo agevolato dal fatto di avere caricato lo schema della tabella oltre ai dati con la chiamata a FillSchema del passaggio 4. Con il supporto dello schema viene identificata la colonna che costituisce la chiave primaria della tabella e il metodo Find dell'insieme Rows diventa disponibile.

    Il metodo Find restituisce l'oggetto DataRow con un valore specifico nella chiave primaria, in questo caso au_id. Dopo avere ottenuto DataRow, Ŕ possibile modificare le colonne. Non Ŕ necessario mandare a capo le modifiche in BeginEdit e EndEdit, ma ci˛ semplifica le operazioni che DataSet deve eseguire, inclusa l'esecuzione contemporanea di tutti i controlli di convalidadurante la chiamata a EndEdit. Incollare il seguente codice dopo "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   					
  7. Per aggiornare il database originale con tutte le modifiche, passare DataSet al metodo Update dell'oggetto DataAdapter.

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

    Per generare i comandi obbligatori quando sono necessari, creare un'istanza dell'oggetto SqlCommandBuilder e utilizzare DataAdapter nel costruttore. Se si desidera utilizzare questo metodo, illustrato nel codice di esempio che segue, Ŕ necessario che siano disponibili le informazioni della chiave primaria della tabella. Per accedere alle informazioni della chiave primaria, chiamare FillSchema e impostare la proprietÓ MissingSchemaAction di DataAdapter su AddWithKey oppure impostare la chiave primaria manualmente nel codice. Incollare il seguente codice dopo "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
  8. Per eliminare completamente una riga, utilizzare il metodo Delete dell'oggetto DataRow. Si noti che l'insieme Rows contiene due metodi, Remove e RemoveAt, che apparentemente eliminano la riga ma in realtÓ la rimuovono semplicemente dall'insieme. Solo con il metodo Delete l'eliminazione viene rinviata al database di origine. Incollare il seguente codice dopo "SEND CHANGES TO 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. Inviare le modifiche a SQL Server per rimuovere il record aggiunto in precedenza. Incollare il seguente codice dopo "DELETE code":
    //*****************
    // CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
  10. Salvare il progetto.
  11. Scegliere Avvia dal menu Debug per eseguire il progetto. 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

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

Riferimenti

Per ulteriori informazioni sull'utilizzo di ADO.NET, degli oggetti DataSet e di SQL, visitare i seguenti siti Web Microsoft (informazioni in lingua inglese):
Diving into Data Access (un articolo di MSDN Voices)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data04122001.asp
ADO.NET for the ADO Programmer
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ dndotnet/html/adonetprogmsdn.asp
MSDN Online .NET Developer Center
http://msdn.microsoft.com/net

ProprietÓ

Identificativo articolo: 307587 - Ultima modifica: martedý 23 gennaio 2007 - Revisione: 6.2
Le informazioni in questo articolo si applicano a
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Chiavi:á
kbhowtomaster kbsqlclient kbsystemdata KB307587
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