7
votes

Comment supprimer les contraintes de DataTable dans .NET?

Je ne peux pas définir de contraintes dans mon jeu de données si je fusionne deux datatables dt1.mmerge (dt2); Il affiche une erreur comme celle-ci Impossible d'activer les contraintes. Une ou plusieurs lignes contiennent des valeurs violant des contraintes non nulles, uniques ou étrangères. Par défaut I Affichage de Visualizer Il affiche les contraintes comptez comme 2. Comment supprimer des contraintes de DataTable et résoudre cette erreur?


0 commentaires

4 Réponses :


3
votes

Essayez itération des contraintes de DataTable et supprimez-les à l'aide de

private void RemoveConstraint(DataTable table, 
    Constraint constraint)
{
    if(table.Constraints.Contains(constraint.ConstraintName))
        if(table.Constraints.CanRemove(constraint))
            table.Constraints.Remove(constraint);
}


0 commentaires

1
votes

EDIT:

OK Ceci est plus clair maintenant: vous ne pouvez pas supprimer les contraintes, ils sont désactivés pendant le fonctionnement de la fusion, puis actionnez automatiquement après la fusion si elles peuvent être activées.

Comme l'erreur est comme une fois l'opération de fusion terminée, les contraintes ne peuvent pas être activées en raison de certaines des valeurs non valides de la cible DataTable. Donc, je pense que vous auriez besoin de mettre à jour explicitement les valeurs de DataTable cible DT2 avant que l'opération de fusion ne commence. Cela peut être fait en regardant les contraintes de DataTable DT1 et en résolvant ces contraintes de DataTable DT2 avec code (en mettant en jour la mise à jour des données de clé null ou non unique ou FORIEGN dans Target DataTable DT2); puis commencer l'opération de fusion.

L'extrait et le lien suivant de MSDN explique cela tout en faisant l'opération de fusion:

pendant une fusion, les contraintes sont désactivées. Si des contraintes ne peuvent pas être activées à la fin de la fusion, une contrainteException est générée et les données fusionnées sont conservées pendant que les contraintes sont désactivées. Dans ce cas, la propriété ExploiceConstraints est définie sur FALSE, et toutes les lignes non valides sont marquées par erreur. Les erreurs doivent être résolues avant de tenter de réinitialiser la propriété EXPERCECECONTIONS à TRUE.

http://msdn.microsoft.com/en-us/library/ 803BH6BC.aspx


3 commentaires

Vijay j'ai essayé votre code, j'ai eu comme cette erreur "Impossible de supprimer" contrainte unique "contrainte1". Supprimer la contrainte de clé étrangère 'Table1_name' Premier "Je ne connais pas le nom des contraintes afin de supprimer les contraintes


@RAVI Essayez Définition de la propriété FixeCeconstraints à FALSE pour votre jeu de données avec: Ds.enforCecRonstraints = Faux, puis effacez les contraintes, puis fusionnez ..


Merci pour votre aide, j'utilise ci-dessous concept pour supprimer les contraintes de DT2 DataTable DTNEW = DT2.ROWS.Cast (). CopieToutable (); dt1.merge (dtnew);



11
votes

Pour supprimer les contraintes d'un jeu de données Vous pouvez utiliser la méthode Clear de la propriété ContrainS:

myDataTable.Constraints.Clear();


0 commentaires

2
votes

Alternativement, vous pouvez également faire

New DataView(dt).ToTable


0 commentaires