Aggiunta di vincoli esistenti a un DataSet

Il metodo Fill di DataAdapter riempie un DataSet solo con colonne e righe di tabella di un'origine dati. Nonostante i vincoli vengano di solito impostati dall'origine dati, per impostazione predefinita il metodo Fill non aggiunge queste informazioni sullo schema al DataSet. Per compilare un DataSet con le informazioni esistenti sui vincoli della chiave primaria da un'origine dati, è possibile chiamare il metodo FillSchema di DataAdapter o impostare la proprietà MissingSchemaAction di DataAdapter su AddWithKey prima di chiamare Fill. In questo modo ci si assicura che i vincoli della chiave primaria nel DataSet riflettano quelli nell'origine dati. Le informazioni sul vincolo della chiave esterna non vengono indicate e devono essere create in modo esplicito, come illustrato in Aggiunta di vincoli alla tabella.

L'aggiunta delle informazioni sullo schema in un DataSet prima di riempirlo con i dati assicura che i vincoli della chiave primaria siano inclusi negli oggetti DataTable e nel DataSet. In questo modo, quando vengono effettuate altre chiamate per eseguire l'operazione Fill nel DataSet, le informazioni nella colonna della chiave primaria vengono utilizzate per confrontare le nuove righe provenienti dall'origine dati con le righe correnti in ogni DataTable e i dati correnti nelle tabelle vengono sovrascritti con i dati provenienti dall'origine dati. Senza le informazioni sullo schema, le nuove righe provenienti dall'origine dati verrebbero aggiunte al DataSet generando righe duplicate.

Nota   Se una colonna in un'origine dati viene identificata come colonna con incremento automatico, il metodo FillSchema, o il metodo Fill con MissingSchemaAction impostata su AddWithKey, crea un DataColumn con una proprietà AutoIncrement impostata su true. È tuttavia necessario impostare direttamente i valori di AutoIncrementStep e AutoIncrementSeed. Per ulteriori informazioni sulle colonne con incremento automatico, vedere Creazione di colonne AutoIncrement.

Se si utilizza FillSchema o si imposta MissingSchemaAction su AddWithKey, è necessaria un'elaborazione aggiuntiva nell'origine dati per determinare le informazioni della colonna della chiave primaria. Questa ulteriore elaborazione può ridurre le prestazioni. Se le informazioni sulla chiave primaria sono note in fase di progettazione, è consigliabile specificare la colonna o le colonne della chiave primaria in modo esplicito per migliorare le prestazioni. Per informazioni sull'impostazione esplicita delle informazioni sulla chiave primaria per una tabella, vedere Definizione di una chiave primaria per una tabella.

Nell'esempio di codice seguente viene descritta la procedura per aggiungere le informazioni sullo schema a un DataSet utilizzando FillSchema.

Dim custDS As DataSet = New DataSet()

custDA.FillSchema(custDS, SchemaType.Source, "Customers")
custDA.Fill(custDS, "Customers")
[C#]
DataSet custDS = new DataSet();

custDA.FillSchema(custDS, SchemaType.Source, "Customers");
custDA.Fill(custDS, "Customers");

Nell'esempio di codice seguente viene descritta la procedura per aggiungere le informazioni sullo schema a un DataSet utilizzando la proprietà MissingSchemaAction.AddWithKey del metodo Fill.

Dim custDS As DataSet = New DataSet()

custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
custDA.Fill(custDS, "Customers")
[C#]
DataSet custDS = new DataSet();

custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custDA.Fill(custDS, "Customers");

Gruppi di risultati multipli

Se l'oggetto DataAdapter individua gruppi di risultati multipli restituiti da SelectCommand, vengono create più tabelle nel DataSet. Alle tabelle viene assegnato il nome predefinito incrementale TableN, che inizia con "Table" per Table0. Se il nome di una tabella viene passato come argomento al metodo FillSchema, alle tabelle viene assegnato il nome predefinito incrementale NomeTabellaN, che inizia con "NomeTabella" per NomeTabella0.

Nota   Se il metodo FillSchema dell'oggetto OleDbDataAdapter viene chiamato per un comando che restituisce gruppi di risultati multipli, vengono restituite solo le informazioni sullo schema del primo gruppo di risultati. Quando vengono restituite informazioni sullo schema per gruppi di risultati multipli utilizzando OleDbDataAdapter, è consigliabile impostare MissingSchemaAction su AddWithKey e ottenere le informazioni sullo schema quando si chiama il metodo Fill.

Vedere anche

Utilizzo di provider di dati .NET Framework per accedere ai dati