Courir très bas sur les idées ici. J'ai un cas où j'utilise SqlBulkCopy pour pomper des données dans une base de données, et à mi-chemin, je rencontre différentes exceptions (violations de clés primaires, violations d'index, etc.).Gestion des erreurs avec SqlBulkCopy - pourrait-il être plus difficile?
J'ai confirmé que les violations sont vraies et doivent être corrigées dans les données. Ce qui est exaspérant, cependant, c'est que si j'écrivais sur la DB avec un DataAdapter (ce qui serait beaucoup plus lent), les mauvaises lignes dans le DataSet auraient HasErrors activé afin que je puisse facilement les trouver et prendre soin de choses. Avec SqlBulkCopy? Rien. Nada. Bonne chance de trouver celui qui a causé votre problème car tout ce que vous obtiendrez est un nom d'erreur (comme "violation de clé primaire dans yada yada yada, bla bla bla") et c'est tout.
Des suggestions? Je ne peux pas croire qu'il n'y a aucun moyen d'obtenir ces erreurs. Avec le standard BCP, je pense que vous pouvez même pomper ces choses dans un fichier journal. Ne pouvons-nous faire quelque chose comme ça avec SqlBulkCopy?
Thx,
Le code source de cette classe est disponible? Je ne pensais pas que MS le publierait là-bas. Pourriez-vous élaborer un peu sur l'idée du lot d'erreurs? Je suis votre train de pensée ... Thx! –
Oui, cela fait partie du code source .NET standard. Consultez http://netmassdownloader.codeplex.com/ pour le moyen le plus simple d'obtenir la source. Avec le batch d'erreur que je veux dire pour chaque ligne, effacez la table de données, appelez WriteToServer() - et vous aurez alors une meilleure idée de la ligne qui a échoué. La performance serait nulle - mais si vous ne l'avez fait que pour des lots erronés, cela pourrait bien fonctionner? –
Le code source de SqlBulkCopy est également disponible sur github https://github.com/Microsoft/referencesource/blob/master/System.Data/System/Data/SqlClient/SqlBulkCopy.cs –