Ajout de contraintes existantes à un DataSet

La méthode Fill du DataAdapter remplit un objet DataSet seulement avec les colonnes et les lignes d’une table d’une source de données ; bien que les contraintes soient généralement définies par la source de données, par défaut, la méthode Fill n’ajoute pas ces informations de schéma au DataSet. Pour remplir un DataSet avec les informations de contrainte de clé primaire existantes provenant d’une source de données, vous pouvez appeler la méthode FillSchema du DataAdapter ou définir la propriété MissingSchemaAction du DataAdapter sur AddWithKey avant d’appeler Fill. Ceci va garantir que les contraintes de clé primaire dans le DataSet reflètent celles de la source de données. Les informations de contrainte de clé étrangère ne sont pas incluses et doivent être créées explicitement, comme indiqué dans Contraintes des DataTables.

L’ajout d’informations de schéma à un DataSet avant de le remplir avec les données garantit que les contraintes de clé primaire sont incluses avec les objets DataTable du DataSet. En conséquence, quand des appels supplémentaires sont effectués pour remplir le DataSet, les informations de colonne de clé primaire sont utilisées pour faire correspondre les nouvelles lignes de la source de données avec les lignes actuelles de chaque DataTable ; les données actuelles des tables sont remplacées par celles de la source de données. Sans les informations de schéma, les nouvelles lignes de la source de données sont ajoutées au DataSet, ce qui a pour résultat des lignes en doublon.

Notes

Si une colonne d’une source de données est identifiée comme étant auto-incrémentée, les méthodes FillSchema ou Fill avec une MissingSchemaAction de AddWithKey crée une DataColumn avec une propriété AutoIncrement définie sur true. Il vous faudra cependant définir vous-même les valeurs AutoIncrementStep et AutoIncrementSeed. Pour plus d’informations sur les colonnes auto-incrémentées, consultez Création de colonnes auto-incrémentées.

L’utilisation de FillSchema ou la définition de MissingSchemaAction sur AddWithKey nécessite un traitement supplémentaire au niveau de la source de données pour déterminer les informations des colonnes de clé primaire. Ce traitement supplémentaire peut gêner la performance. Si vous connaissez les informations de clé primaire au moment du design, il est recommandé de spécifier explicitement la ou les colonnes de clé primaire afin d'atteindre une performance optimale. Pour plus d’informations sur la définition explicite des informations de clé primaire pour une table, consultez Définition de clés primaires.

L’exemple de code suivant montre comment ajouter des informations de schéma à un DataSet en utilisant 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");  

L’exemple de code suivant montre comment ajouter des informations de schéma à un DataSet en utilisant la propriété MissingSchemaAction.AddWithKey de la méthode 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");  

Gestion de plusieurs jeux de résultats

Si le DataAdapter trouve plusieurs jeux de résultats retournés depuis la SelectCommand, il va créer plusieurs tables dans le DataSet. Les tables recevront un nom incrémentiel par défaut commençant à zéro TableN, en commençant par Table au lieu de « Table0 ». Si un nom de table est passé comme argument à la méthode FillSchema, les tables recevront un nom incrémentiel commençant à zéro Nom_tableN, en commençant par Nom_table au lieu de « Nom_table0 ».

Notes

Si la méthode FillSchema de l’objet OleDbDataAdapter est appelée pour une commande qui retourne plusieurs jeux de résultats, seules les informations de schéma provenant du premier jeu de résultats sont retournées. Lors du retour d’informations de schéma pour plusieurs jeux de résultats en utilisant OleDbDataAdapter, il est recommandé de spécifier une MissingSchemaAction de AddWithKey et d’obtenir les informations de schéma lors de l’appel à la méthode Fill.

Voir aussi