Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
La DataSet classe e le classi correlate sono tecnologie .NET Framework legacy dei primi anni '2000 che consentono alle applicazioni di lavorare con i dati in memoria mentre le app vengono disconnesse dal database. Le tecnologie sono particolarmente utili per le app che consentono agli utenti di modificare i dati e rendere persistenti le modifiche apportate al database. Sebbene i set di dati siano una tecnologia di successo comprovata, l'approccio consigliato per le nuove applicazioni .NET consiste nell'usare Entity Framework Core. Entity Framework offre un modo più naturale per usare i dati tabulari come modelli a oggetti e dispone di un'interfaccia di programmazione più semplice.
Questo articolo descrive come eseguire query e modificare i dati nelle tabelle nei set di dati di .NET Framework. È possibile modificare i dati nelle tabelle dati in modo molto simile a quello delle tabelle in qualsiasi database. È possibile inserire, aggiornare ed eliminare record nella tabella. In un modulo associato a dati è possibile specificare i campi modificabili dall'utente.
In questi casi, l'infrastruttura di associazione dati gestisce tutto il rilevamento delle modifiche in modo che le modifiche possano essere inviate al database. Se si modificano i dati a livello di codice e si desidera inviare le modifiche al database, è necessario utilizzare oggetti e metodi che eseguono il rilevamento delle modifiche.
Oltre a modificare i dati effettivi, è anche possibile eseguire una query su DataTable per restituire righe di dati specifiche. Ad esempio, è possibile eseguire query per singole righe, versioni originali o proposte di righe, righe modificate o righe che contengono errori.
Prerequisiti
Per usare Visual Studio per eseguire query e modificare i dati nei set di dati di .NET Framework, è necessario:
- Carichi di lavoro di sviluppo e elaborazione dei dati per desktop .NET installati in Visual Studio. Per altre informazioni, vedere Modificare Visual Studio.
- Un progetto C# o Visual Basic (VB) .NET Framework creato.
- Set di dati creato da un database LocalDB di SQL Server Express .
Modificare le righe in un set di dati
Per modificare una riga esistente in un DataTableoggetto , è necessario individuare l'oggetto DataRow da modificare e quindi assegnare i valori aggiornati alle colonne desiderate.
Se non si conosce l'indice della riga da modificare, usare il FindBy metodo per eseguire la ricerca in base alla chiave primaria.
NorthwindDataSet.CustomersRow customersRow =
northwindDataSet1.Customers.FindByCustomerID("ALFKI");
customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";
Dopo aver appreso l'indice di riga, è possibile usarlo per accedere e modificare la riga.
northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";
Inserire nuove righe in un set di dati
Le applicazioni che usano controlli associati a dati in genere aggiungono nuovi record usando il pulsante Aggiungi nuovo in un controllo BindingNavigator.
È anche possibile aggiungere un nuovo record a un set di dati chiamando il NewRow metodo su DataTable. Aggiungere quindi la riga alla DataRow raccolta (Rows).
NorthwindDataSet.CustomersRow newCustomersRow =
northwindDataSet1.Customers.NewCustomersRow();
newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";
northwindDataSet1.Customers.Rows.Add(newCustomersRow);
Eliminare record da una tabella dati
È possibile eliminare un oggetto DataRow chiamando il Remove metodo dell'oggetto DataRowCollectionoppure chiamando il Delete metodo dell'oggetto DataRow .
Il Remove metodo rimuove la riga dall'insieme. Se l'applicazione non deve inviare gli aggiornamenti a un'origine dati, è possibile rimuovere i record accedendo direttamente alla raccolta di righe di dati con Remove.
Viceversa, il metodo Delete non rimuove effettivamente DataRow, ma lo contrassegna per la cancellazione. La rimozione effettiva si verifica quando si chiama AcceptChanges il metodo . È possibile controllare a livello di codice quali righe sono contrassegnate per la rimozione prima di eliminarle effettivamente.
Per conservare le informazioni necessarie al set di dati per inviare aggiornamenti all'origine dati, usare il metodo Delete per rimuovere DataRow dalla tabella dei dati. Se l'applicazione utilizza un TableAdapter o un DataAdapter, il metodo Update elimina le righe con un RowState di Deleted.
Nell'esempio seguente viene illustrato come chiamare il Delete metodo per contrassegnare la prima riga della Customers tabella come eliminata:
Annotazioni
Se si ottiene la proprietà count di un oggetto DataRowCollection, il conteggio risultante include record contrassegnati per la cancellazione. Per ottenere un conteggio accurato dei record non contrassegnati per l'eliminazione, è possibile scorrere la raccolta ed esaminare la RowState proprietà di ogni record. I record contrassegnati per l'eliminazione hanno un RowState valore pari a Deleted. In alternativa, è possibile creare una visualizzazione dati di un set di dati che filtra in base allo stato di riga e ottenere la proprietà count da essa.
Determinare se sono presenti righe modificate
Quando si apportano modifiche ai record in un set di dati, le informazioni su tali modifiche vengono archiviate fino a quando non vengono confermate. Si esegue il commit delle modifiche quando si chiama il metodo AcceptChanges di un set di dati o di una tabella di dati, o quando si chiama il metodo Update di un adattatore dati TableAdapter.
Le modifiche vengono rilevate in due modi in ogni riga di dati:
Ogni riga di dati contiene informazioni correlate al relativo RowState, ad esempio Added, ModifiedDeleted, o Unchanged.
Ogni riga di dati modificata contiene più versioni. DataRowVersion include la versione originale prima delle modifiche e la versione corrente dopo le modifiche. Mentre una modifica è in sospeso ed è possibile rispondere all'evento RowChanging , è disponibile anche una terza versione proposta.
Per verificare la presenza di righe modificate, chiamare il HasChanges metodo di un set di dati. Il metodo restituisce true se sono state apportate modifiche nel set di dati. Dopo aver determinato che esistono modifiche, è possibile chiamare il GetChanges metodo di un DataSet oggetto o DataTable per restituire un set di righe modificate.
Nell'esempio seguente viene illustrato come controllare il valore restituito dal HasChanges metodo per rilevare se sono presenti righe modificate in NorthwindDataset1.
if (northwindDataSet1.HasChanges())
{
// Changed rows were detected, add appropriate code.
}
else
{
// No changed rows were detected, add appropriate code.
}
Determinare il tipo di modifiche
È possibile verificare il tipo di modifiche apportate in un set di dati passando un valore dall'enumerazione DataRowState al HasChanges metodo .
Nell'esempio seguente viene illustrato come controllare il NorthwindDataset1 set di dati per determinare se sono state aggiunte nuove righe.
if (northwindDataSet1.HasChanges(DataRowState.Added))
{
// New rows have been added to the dataset, add appropriate code.
}
else
{
// No new rows have been added to the dataset, add appropriate code.
}
Individuare le righe con errori
Quando si lavora con singole colonne e righe di dati, è possibile che si verifichino errori. È possibile controllare la proprietà HasErrors per determinare se esistono errori in un DataSet, DataTable, o DataRow.
Se la proprietà HasErrors per il dataset è true, passare in rassegna le raccolte di tabelle e successivamente le righe per trovare quelle contenenti errori.
private void FindErrors()
{
if (dataSet1.HasErrors)
{
foreach (DataTable table in dataSet1.Tables)
{
if (table.HasErrors)
{
foreach (DataRow row in table.Rows)
{
if (row.HasErrors)
{
// Process error here.
}
}
}
}
}
}