Gestione di un errore di rete durante un SqlBulkCopy transazionale

ado.net c# sql sqlbulkcopy

Domanda

Sto cercando SqlBulkCopy di SqlClient in ADO.Net e ho le seguenti domande.

Che cosa accadrà, se si è verificato un errore di rete durante un'operazione SqlBulkCopy , eseguito come parte di una transazione su un numero enorme di record?

La transazione sarà lasciata aperta (né impegnata, né ripristinata) nel server, fino a quando non la uccidiamo manualmente?

Qual è l'approccio migliore per inviare un numero elevato di record in due DataTable (InvoiceHeader, InvoiceDetails) in un DataSet alle rispettive tabelle SQL Server (InvoiceHeader, InvoiceDetails)?

Grazie.

MODIFICARE:

Alcuni dettagli che volevo aggiungere, ma ho dimenticato:

Questo è per. Net v3.5; Sto usando Enterprise Library per tutte le interazioni del database.

Risposta accettata

Supponendo che si stia utilizzando TransactionScope, si capisce che no , la transazione non verrà lasciata aperta, poiché SQL Server rileverà la transazione ambientale e l'inserimento automatico. Ciò significa che il caso peggiore è che la transazione vada in time-out, tornando indietro. È possibile modificare il binding della transazione per specificare cosa fare in caso di timeout (probabilmente si desidera un esplicito unbind).



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché