Ajout de contraintes existantes à un DataSet (ADO.NET)

Mise à jour : November 2007

La méthode Fill du DataAdapter remplit un objet DataSet uniquement avec les colonnes et les lignes de la table d'une source de données ; bien que les contraintes soient généralement définies par la source de données, la méthode Fill n'ajoute pas ces informations de schéma au DataSet par défaut. 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 affecter AddWithKey à la propriété MissingSchemaAction du DataAdapter avant d'appeler Fill. Cela garantira 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 explicitement créées, comme indiqué dans Contraintes DataTable (ADO.NET).

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, lorsque des appels supplémentaires sont établis 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 doubles.

Remarque :

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 un MissingSchemaAction de AddWithKey créent un DataColumn avec la valeur true affectée à une propriété AutoIncrement. 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, voir Création de colonnes AutoIncrement (ADO.NET).

L'utilisation de FillSchema ou l'affectation de AddWithKey à MissingSchemaAction exigent un traitement supplémentaire au niveau de la source de données afin de déterminer les informations de colonne 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, voir Définition des clés primaires (ADO.NET).

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

L'exemple de code suivant montre comment ajouter des informations de schéma à un DataSet à l'aide de la propriété MissingSchemaAction.AddWithKey de la méthode Fill.

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");

Gestion de résultats actifs multiples

Si le DataAdapter trouve plusieurs jeux de résultats retournés à partir de SelectCommand, il créera plusieurs tables dans le DataSet. Les tables recevront un nom incrémentiel par défaut de base zéro de 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 de base zéro de TableNameN, en commençant par TableName au lieu de « TableName0 ».

Remarque :

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 à l'aide de OleDbDataAdapter, il est recommandé de spécifier un MissingSchemaAction du AddWithKey et d'obtenir les informations de schéma lors de l'appel à la méthode Fill.

Voir aussi

Autres ressources

DataAdapters et DataReaders (ADO.NET)

Objets DataSet, DataTable et DataView (ADO.NET)

Extraction et modification de données dans ADO.NET