Share via


Ajout de contraintes existantes à un DataSet

La méthode Fill du DataAdapter remplit un DataSet uniquement avec les colonnes et les lignes de la table provenant 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. Ceci 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é externe ne sont pas incluses et devront être explicitement créées, comme indiqué dans Ajout de contraintes à une table.

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 (Fill) 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, consultez Création de colonnes AutoIncrement.

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, consultez Définition d'une clé primaire pour une table.

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

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

Jeux de résultats 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 TableN, commençant par « Table » pour Table0. Si un nom de table est passé comme argument à la méthode FillSchema, les tables recevront un nom incrémentiel par défaut de TableNameN, commençant par « TableName » pour 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 seront 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

Utilisation des fournisseurs de données .NET Framework pour l'accès aux données