Eseguire query sui set di dati nelle applicazioni .NET Framework

Nota

I set di dati 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 applicazioni vengono disconnesse dal database. Sono particolarmente utili per le applicazioni che consentono agli utenti di modificare i dati e rendere persistenti le modifiche apportate al database. Anche se i set di dati hanno dimostrato di essere una tecnologia molto efficace, è consigliabile che le nuove applicazioni .NET usino Entity Framework Core. Entity Framework offre un modo più naturale per usare i dati tabulari come modelli a oggetti e ha un'interfaccia di programmazione più semplice.

Per cercare record specifici in un set di dati, usare il FindBy metodo in DataTable, scrivere un'istruzione foreach personalizzata per eseguire un ciclo sull'insieme Rows della tabella o usare LINQ to DataSet.

Distinzione tra maiuscole e minuscole del set di

All'interno di un set di dati, i nomi di tabella e di colonna non fanno distinzione tra maiuscole e minuscole per impostazione predefinita, ovvero una tabella in un set di dati denominato "Clienti" può anche essere definita "Clienti". Corrisponde alle convenzioni di denominazione in molti database, incluso SQL Server. In SQL Server il comportamento predefinito è che i nomi degli elementi di dati non possono essere distinti solo per caso.

Nota

A differenza dei set di dati, i documenti XML fanno distinzione tra maiuscole e minuscole, pertanto i nomi degli elementi dati definiti negli schemi fanno distinzione tra maiuscole e minuscole. Ad esempio, il protocollo dello schema consente allo schema di definire una tabella denominata e una tabella diversa denominata Customerscustomers. Ciò può comportare conflitti di nomi quando viene usato uno schema che contiene elementi che differiscono solo per maiuscole e minuscole per generare una classe del set di dati.

La distinzione tra maiuscole e minuscole, tuttavia, può essere un fattore nel modo in cui i dati vengono interpretati all'interno del set di dati. Ad esempio, se si filtrano i dati in una tabella del set di dati, i criteri di ricerca potrebbero restituire risultati diversi a seconda che il confronto sia con distinzione tra maiuscole e minuscole. È possibile controllare la distinzione tra maiuscole e minuscole di filtro, ricerca e ordinamento impostando la proprietà del set di CaseSensitive dati. Per impostazione predefinita, tutte le tabelle nel set di dati ereditano il valore di questa proprietà. È possibile eseguire l'override di questa proprietà per ogni singola tabella impostando la proprietà della CaseSensitive tabella.

Individuare una riga specifica in una tabella dati

Per trovare una riga in un set di dati tipizzato con un valore di chiave primaria

  • Per individuare una riga, chiamare il metodo fortemente tipizzato FindBy che usa la chiave primaria della tabella.

    Nell'esempio seguente la CustomerID colonna è la chiave primaria della Customers tabella. Ciò significa che il metodo generato FindBy è FindByCustomerID. Nell'esempio viene illustrato come assegnare una variabile specifica DataRow usando il metodo generato FindBy .

    NorthwindDataSet.CustomersRow customersRow = 
        northwindDataSet1.Customers.FindByCustomerID("ALFKI");
    

Per trovare una riga in un set di dati non tipizzato con un valore di chiave primaria

  • Chiamare il Find metodo di una DataRowCollection raccolta, passando la chiave primaria come parametro.

    Nell'esempio seguente viene illustrato come dichiarare una nuova riga denominata foundRow e assegnargli il valore restituito del Find metodo . Se viene trovata la chiave primaria, il contenuto dell'indice di colonna 1 viene visualizzato in una finestra di messaggio.

    string s = "primaryKeyValue";
    DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s);
    
    if (foundRow != null) 
    {
        MessageBox.Show(foundRow[0].ToString());
    }
    else
    {
        MessageBox.Show("A row with the primary key of " + s + " could not be found");
    }
    

Trovare righe per valori di colonna

Per trovare righe in base ai valori in qualsiasi colonna

  • Le tabelle di dati vengono create con il Select metodo , che restituisce una matrice di DataRows in base all'espressione passata al Select metodo . Per altre informazioni sulla creazione di espressioni valide, vedere la sezione "Sintassi delle espressioni" della pagina relativa alla Expression proprietà .

    Nell'esempio seguente viene illustrato come utilizzare il Select metodo di DataTable per individuare righe specifiche.

    DataRow[] foundRows;
    foundRows = dataSet1.Tables["Customers"].Select("CompanyName Like 'A%'");
    

Quando le tabelle in un set di dati sono correlate, un DataRelation oggetto può rendere disponibili i record correlati in un'altra tabella. Ad esempio, è possibile rendere disponibile un set di dati contenente Customers tabelle e Orders .

È possibile utilizzare un DataRelation oggetto per individuare i record correlati chiamando il GetChildRows metodo di un DataRow oggetto nella tabella padre. Questo metodo restituisce una matrice di record figlio correlati. In alternativa, è possibile chiamare il GetParentRow metodo di un DataRow oggetto nella tabella figlio. Questo metodo restituisce un singolo DataRow oggetto dalla tabella padre.

Questa pagina fornisce esempi che usano set di dati tipizzato. Per informazioni sull'esplorazione delle relazioni in set di dati non tipizzato, vedere Esplorazione di DataRelations.

Nota

Se si lavora in un'applicazione Windows Form e si usano le funzionalità di data binding per visualizzare i dati, il modulo generato dalla finestra di progettazione potrebbe fornire funzionalità sufficienti per l'applicazione. Per altre informazioni, vedere Associare controlli ai dati in Visual Studio. In particolare, vedere Relazioni nei set di dati.

Gli esempi di codice seguenti illustrano come spostarsi tra relazioni verso l'alto e verso il basso in set di dati tipizzato. Negli esempi di codice vengono usati i metodi typed DataRows (NorthwindDataSet.OrdersRow) e i metodi FindByPrimaryKey (FindByCustomerID) generati per individuare una riga desiderata e restituire i record correlati. Gli esempi vengono compilati ed eseguiti correttamente solo se si dispone di:

  • Istanza di un set di dati denominato NorthwindDataSet con una Customers tabella.

  • Tabella Orders .

  • Relazione denominata FK_Orders_Customersrelativa alle due tabelle.

Inoltre, entrambe le tabelle devono essere compilate con i dati per i record da restituire.

Per restituire i record figlio di un record padre selezionato

  • Chiamare il GetChildRows metodo di una riga di dati specifica Customers e restituire una matrice di righe dalla Orders tabella:

    string custID = "ALFKI";
    NorthwindDataSet.OrdersRow[] orders;
    
    orders = (NorthwindDataSet.OrdersRow[])northwindDataSet.Customers.
        FindByCustomerID(custID).GetChildRows("FK_Orders_Customers");
    
    MessageBox.Show(orders.Length.ToString());
    

Per restituire il record padre di un record figlio selezionato

  • Chiamare il GetParentRow metodo di una riga di dati specifica Orders e restituire una singola riga dalla Customers tabella:

    int orderID = 10707;
    NorthwindDataSet.CustomersRow customer;
    
    customer = (NorthwindDataSet.CustomersRow)northwindDataSet.Orders.
        FindByOrderID(orderID).GetParentRow("FK_Orders_Customers");
    
    MessageBox.Show(customer.CompanyName);