Aggiunta di vincoli esistenti a un dataset

Il metodo Fill di DataAdapter consente di compilare un solo DataSet con colonne e righe di tabella di un'origine dati. Sebbene i vincoli in genere vengano impostati dall'origine dati, per impostazione predefinita il metodo Fill non aggiunge queste informazioni sullo schema a 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, oppure impostare la proprietà MissingSchemaAction di DataAdapter su AddWithKey prima di chiamare Fill. Ciò garantisce che i vincoli della chiave primaria in DataSet riflettano quelli nell'origine dati. Le informazioni sul vincolo di chiave esterna non sono incluse e devono essere create in modo esplicito, come illustrato in Vincoli DataTable.

L'aggiunta delle informazioni sullo schema in una classe DataSet prima di compilarla con i dati assicura che i vincoli della chiave primaria siano inclusi con gli oggetti DataTable in DataSet. In questo modo, quando vengono effettuate altre chiamate per compilare DataSet, le informazioni nella colonna della chiave primaria vengono usate 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 a 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 una proprietà MissingSchemaAction impostata su AddWithKey, crea un oggetto DataColumn con una proprietà AutoIncrement impostata su true. È tuttavia necessario impostare direttamente i valori di AutoIncrementStep e AutoIncrementSeed. Per altre informazioni sulle colonne con incremento automatico, vedere Creazione di colonne con incremento automatico.

Se si usa 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 altre informazioni sull'impostazione esplicita delle informazioni sulla chiave primaria per una tabella, vedere Definizione di chiave primarie.

Nell'esempio di codice seguente, viene descritto come aggiungere le informazioni sullo schema a un DataSet usando FillSchema:

Dim custDataSet As New DataSet()  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");  
custAdapter.Fill(custDataSet, "Customers");  

Nell'esempio di codice seguente, viene descritto come aggiungere le informazioni sullo schema a un DataSet usando la proprietà MissingSchemaAction.AddWithKey del metodo Fill:

Dim custDataSet As New DataSet()  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;  
custAdapter.Fill(custDataSet, "Customers");  

Gestione di più set di risultati

Se l'oggetto DataAdapter rileva più set di risultati restituiti da SelectCommand, verranno create più tabelle nel DataSet. Alle tabelle viene assegnato un nome predefinito incrementale in base zero TableN, che inizia con Table invece che con "Table0". Se il nome di una tabella viene passato come argomento al metodo FillSchema, alle tabelle verrà assegnato il nome incrementale in base zero TableNameN, che inizia con TableName anziché con "TableName0".

Nota

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

Vedi anche