Aggiunta di vincoli esistenti a un datasetAdding Existing Constraints to a DataSet

Il metodo Fill di DataAdapter compila un oggetto DataSet solo con le colonne e le righe della tabella da un'origine dati. Sebbene i vincoli siano comunemente impostati dall'origine dati, il metodo Fill non aggiunge le informazioni sullo schema al Set di dati per impostazione predefinita.The Fill method of the DataAdapter fills a DataSet only with table columns and rows from a data source; though constraints are commonly set by the data source, the Fill method does not add this schema information to the DataSet by default. Per popolare un set di dati con informazioni sui vincoli PRIMARY KEY esistenti da un'origine dati, è possibile chiamare il metodo FillSchema di DataAdapteroppure impostare la proprietà MissingSchemaAction di DataAdapter . per AddWithKey prima di chiamare Fill.To populate a DataSet with existing primary key constraint information from a data source, you can either call the FillSchema method of the DataAdapter, or set the MissingSchemaAction property of the DataAdapter to AddWithKey before calling Fill. In questo modo si garantisce che i vincoli PRIMARY KEY nel set di dati corrispondano a quelli dell'origine dati.This will ensure that primary key constraints in the DataSet reflect those at the data source. Le informazioni sui vincoli di chiave esterna non sono incluse e devono essere create in modo esplicito, come illustrato nei vincoli DataTable.Foreign key constraint information is not included and must be created explicitly, as shown in DataTable Constraints.

L'aggiunta di informazioni sullo schema a un set di dati prima di compilarlo con i dati garantisce DataTable che i vincoli PRIMARY KEY siano inclusi negli oggetti nel setdi dati.Adding schema information to a DataSet before filling it with data ensures that primary key constraints are included with the DataTable objects in the DataSet. Di conseguenza, quando vengono effettuate chiamate aggiuntive per il riempimento del set di dati, le informazioni sulla colonna chiave primaria vengono usate per trovare una corrispondenza tra le nuove righe dell'origine dati e le righe correnti in ogni DataTablee i dati correnti delle tabelle vengono sovrascritti con i dati del origine dati.As a result, when additional calls to fill the DataSet are made, the primary key column information is used to match new rows from the data source with current rows in each DataTable, and current data in the tables is overwritten with data from the data source. Senza le informazioni sullo schema, le nuove righe dall'origine dati vengono accodate al DataSet, ottenendo righe duplicate.Without the schema information, the new rows from the data source are appended to the DataSet, resulting in duplicate rows.

Nota

Se una colonna in un'origine dati viene identificata come incremento automatico, il metodo FillSchema o il metodo Fill con un oggetto MissingSchemaAction di AddWithKey, crea una DataColumn con una proprietà AutoIncrement impostare su true.If a column in a data source is identified as auto-incrementing, the FillSchema method, or the Fill method with a MissingSchemaAction of AddWithKey, creates a DataColumn with an AutoIncrement property set to true. Tuttavia, sarà necessario impostare manualmente i valori AutoIncrementStep e AutoIncrementSeed .However, you will need to set the AutoIncrementStep and AutoIncrementSeed values yourself. Per altre informazioni sulle colonne a incremento automatico, vedere creazione di colonne AutoIncrement.For more information about auto-incrementing columns, see Creating AutoIncrement Columns.

L'uso di FillSchema o dell'impostazione di MissingSchemaAction su AddWithKey richiede un'elaborazione aggiuntiva nell'origine dati per determinare le informazioni sulla colonna chiave primaria.Using FillSchema or setting the MissingSchemaAction to AddWithKey requires extra processing at the data source to determine primary key column information. Questa ulteriore elaborazione può ridurre le prestazioni.This additional processing can hinder performance. 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.If you know the primary key information at design time, we recommend that you explicitly specify the primary key column or columns in order to achieve optimal performance. Per informazioni sull'impostazione esplicita delle informazioni sulla chiave primaria per una tabella, vedere definizione di chiavi primarie.For information about explicitly setting primary key information for a table, see Defining Primary Keys.

Nell'esempio di codice riportato di seguito viene illustrato come aggiungere informazioni sullo schema a un DataSet utilizzando FillSchema.The following code example shows how to add schema information to a DataSet using FillSchema.

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

Nell'esempio di codice seguente viene illustrato come aggiungere informazioni sullo schema a un DataSet utilizzando la proprietà MissingSchemaAction. AddWithKey del metodo Fill .The following code example shows how to add schema information to a DataSet using the MissingSchemaAction.AddWithKey property of the Fill method.

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

Gestione di più set di risultatiHandling Multiple Result Sets

Se DataAdapter rileva più set di risultati restituiti da SelectCommand, creerà più tabelle nel set di dati.If the DataAdapter encounters multiple result sets returned from the SelectCommand, it will create multiple tables in the DataSet. Alle tabelle verrà assegnato un nome predefinito incrementale in base zero della tabella N, a partire dalla tabella anziché da "Table0".The tables will be given a zero-based incremental default name of Table N, starting with Table instead of "Table0". Se un nome di tabella viene passato come argomento al metodo FillSchema , alle tabelle verrà assegnato un nome incrementale in base zero di TableName N, a partire da TableName anziché da "TableName0".If a table name is passed as an argument to the FillSchema method, the tables will be given a zero-based incremental name of TableName N, starting with TableName instead of "TableName0".

Nota

Se viene chiamato il metodo FillSchema dell'oggetto OleDbDataAdapter per un comando che restituisce più set di risultati, vengono restituite solo le informazioni sullo schema del primo set di risultati.If the FillSchema method of the OleDbDataAdapter object is called for a command that returns multiple result sets, only the schema information from the first result set is returned. Quando si restituiscono informazioni sullo schema per più set di risultati utilizzando OleDbDataAdapter, è consigliabile specificare un MissingSchemaAction di AddWithKey e ottenere le informazioni sullo schema durante la chiamata al riempimento Metodo.When returning schema information for multiple result sets using the OleDbDataAdapter, it is recommended that you specify a MissingSchemaAction of AddWithKey and obtain the schema information when calling the Fill method.

Vedere ancheSee also