Le meilleur moyen d'attraper sql violations de contrainte unique en c# au cours des inserts
J'ai une boucle en c# qui s'insère dans une table. de jolis trucs de base. Est-il quelque chose de insdie l'objet de l'exception qui est levée lorsqu'une unique contrainte est violée que je peux utiliser pour voir ce que les délinquance de la valeur est?
Ou est-il un moyen de retourner dans le sql? j'ai une série de fichiers dont les données im chargement dans les tableaux et je suis de baguage de ma tête en essayant de trouver la dupe.
Je sais que je pourrais mettre ensemble quelque chose de purement IO-basé dans le code que peut trouver, mais je voudrais quelque chose que je pourrais utiliser comme une solution plus permanente.
Si vous êtes de l'insérer dans la table SQL à l'aide de la boucle de vous faire mal
C'est un peu dur de dire "mauvais" sans connaître le scénario, mais il est probable qu'une meilleure façon de le faire
Pourquoi est-ce mal ou inefficace? Me lier à de la documentation sur la façon correcte de le faire. Je suis encore à apprendre. Merci.
Faire des appels répétés de la le serveur peut être coûteux
Comment puis-je éviter la répétition des appels au serveur? J'utilise ADO.Net alors, êtes-vous parler SqlBulkCon à la place? J'ai l'habitude de boucler la boucle dans une instruction d'utilisation avec un objet sqlconnection. Si il y a un moyen plus efficace quelqu'un peut-veuillez fournir des liens? Il serait grandement apprécié.
C'est un peu dur de dire "mauvais" sans connaître le scénario, mais il est probable qu'une meilleure façon de le faire
Pourquoi est-ce mal ou inefficace? Me lier à de la documentation sur la façon correcte de le faire. Je suis encore à apprendre. Merci.
Faire des appels répétés de la le serveur peut être coûteux
Comment puis-je éviter la répétition des appels au serveur? J'utilise ADO.Net alors, êtes-vous parler SqlBulkCon à la place? J'ai l'habitude de boucler la boucle dans une instruction d'utilisation avec un objet sqlconnection. Si il y a un moyen plus efficace quelqu'un peut-veuillez fournir des liens? Il serait grandement apprécié.
OriginalL'auteur user609926 | 2014-07-14
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est une SqlException, plus précisément la violation des contraintes de clé primaire. Vous pouvez obtenir cette erreur spécifique de cette exception en regardant le nombre de propriété de l'exception levée. Cette réponse est probablement à ce dont vous avez besoin:
Comment Identifier la clé primaire de la duplication à partir d'un Serveur SQL server 2008 code d'erreur?
En résumé, il ressemble à ceci:
EDIT:
Cela peut être très orthodoxe, mais vous pourriez tout aussi bien inspecter le composant de message de l'exception. Quelque chose comme ceci:
bonne prise, je vais mettre à jour
tant qu'il attrape une contrainte qui indique un enregistrement en double (qui peut être soit) qui est assez bon pour moi. J'ai fait un peu plus de la recherche et de la fonction sys.table des messages, le message " Violation d' %ls contrainte '%.*ls'. Impossible d'insérer une clé en double dans l'objet '%.*ls'.' qui, je pense, me couvre dans les deux cas. Les deux postes ont été utiles.
Vérifier également pour
ex.Number == 2601
stackoverflow.com/questions/31515776/...OriginalL'auteur Bill Sambrone
Vous pouvez rassembler les insérer dans une procédure stockée qui d'abord validé il n'y a pas de doublons avant de l'insérer. De cette façon, vous pouvez contrôler exactement ce qui revient lorsque la valeur est dupliqué.
En outre, vous pouvez constater que le changement de l'insert logique dans une SP vous permettra de faire le bulk insert qui vous semblent le faire sans faire des appels répétés à la DB.
Pour une réponse à votre question réelle:
Unique de Violation de Clé dans SQL Server - Est-il sûr de supposer Erreur 2627?
OriginalL'auteur pm_2
Vous pourriez faire de cette manière:
OriginalL'auteur usefulBee
En plus du projet de Loi Sambrone réponse,
Deux codes d'erreur sont utilisés pour vérifier la clé unique de la violation
2601 - Violation in unique index
2627 - Violation in unique constraint (although it is implemented using unique index)
Soit vous pouvez utiliser l'un ou les deux en fonction de vos besoins:
OU
OriginalL'auteur Muhammad Saqib