Gestion d'une défaillance réseau lors d'une transaction SqlBulkCopy

ado.net c# sql sqlbulkcopy

Question

Je fais des recherches sur SqlBulkCopy de SqlClient dans ADO.Net et je pose les questions suivantes.

Que se passera-t-il s'il se produisait une erreur réseau lors d'une opération SqlBulkCopy s'exécutant dans le cadre d'une transaction sur un très grand nombre d'enregistrements?

La transaction sera-t-elle laissée ouverte (ni engagée, ni annulée) sur le serveur, jusqu'à ce que nous la supprimions manuellement?

Quelle est la meilleure approche pour envoyer un grand nombre d'enregistrements dans deux tables de données (InvoiceHeader, InvoiceDetails) d'un ensemble de données vers des tables SQL Server respectives (InvoiceHeader, InvoiceDetails)?

Je vous remercie.

MODIFIER:

Quelques détails que je voulais ajouter, mais j'ai oublié:

Ceci est pour .Net v3.5; J'utilise Enterprise Library pour toutes les interactions de base de données.

Réponse acceptée

En supposant que vous utilisez un TransactionScope, j’entends que non , la transaction ne sera pas laissée ouverte, car SQL Server détectera la transaction ambiante et s’enregistrera automatiquement. Cela signifie que le pire des cas est que la transaction arrive à expiration, en arrière. Vous pouvez modifier la liaison de transaction pour spécifier la procédure à suivre en cas de dépassement du délai d'attente (vous souhaitez probablement annuler la liaison de manière explicite).



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi