2009-10-02 4 views
2

J'écris une application utilisant C# 2005 et Sql Server 2000.Quelle ligne de l'ensemble de données enfreint la contrainte unique DB?

J'ai une table, avec une contrainte unique et, dans le cas où je suis concerné, j'ai deux utilisateurs en utilisant une forme qui (quand Enregistrer est pressé) mettre à jour la table. Si la table est, disons, NOMS (ID int, NOM varchar (20)) et la contrainte unique est sur NAME, si le premier utilisateur à enregistrer ajoute les NOMs 'David' et 'John' alors c'est bien. Si le deuxième utilisateur essaie de mettre à jour à l'aide d'un DataTable qui contient des lignes avec les noms "John" et "Susan", une exception SqlException est levée. Cependant, il n'y a rien dans l'exception qui m'indique quelle ligne de mon DataTable a violé la contrainte.

En plus d'obtenir les détails de la composition de la contrainte unique de la base de données et d'utiliser cette information pour vérifier chaque ligne dans ma DataTable pour voir si cette ligne viole la contrainte, est-il possible de déterminer quelle ligne est en cause?

Répondre

1

De plus, il est possible que les lignes du DataTable soient simplement en conflit les unes avec les autres, et que l'opération de base de données échoue, même si rien dans la base de données n'est en conflit avec le DataTable.

2

Vous devez utiliser DataTable.GetErrors pour obtenir un tableau des DataRows avec des erreurs.

Pour chaque DataRow du tableau, vous devez vérifier DataRow.RowError et quelles colonnes sont erronées avec DataRow.GetColumnsInError.

+0

DataTable.GetErrors.Length est 0 donc cela n'aide pas, malheureusement. – dmlinliverpool

+0

Je m'attendrais à ce qu'il y ait des erreurs dans DataTable.GetErrors si j'avais ajouté une ligne au DataTable qui (disons) avait une valeur nulle dans une colonne non nullable, mais les lignes qui sont dans le DataTable sont des lignes valides. C'est juste quand ils frappent la base de données qu'ils s'affrontent avec des lignes déjà dans la base de données. – dmlinliverpool

+0

Qu'est-ce que vous utilisez pour obtenir les données du DataTable à la base de données? Un DataAdapter? –

Questions connexes