[英]Does SQLBulkCopy Upload any data upon failure?
我正在從excel電子表格到臨時表,然后從臨時表到生產數據庫進行數據的sql批量復制。
我的問題是,如果由於任何原因上傳到臨時表或生產數據庫失敗,事務是否會回滾並且沒有數據被導入或修改現有數據?
默認情況下, SqlBulkCopy
將回滾到您完成的最后一批 。 如果BatchSize
為0(默認值),它將在一個批處理中完成所有操作,但如果批處理上載時間過長(默認為30秒),則可能會超時 。
另一種選擇是將整個事物包裝在外部事務中並將其傳遞給構造函數 。 這將在錯誤而不是最后一批上回滾整個插入操作,這允許您使用較小的批次但仍然將整個插入作為單個事務。 這也允許您使用相同的事務將數據從臨時登台表移動到您的實時數據。
這是從MSDN獲取的snippit
using (SqlConnection destinationConnection = new SqlConnection(connectionString))
{
destinationConnection.Open();
using (SqlTransaction transaction = destinationConnection.BeginTransaction())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(
destinationConnection, SqlBulkCopyOptions.KeepIdentity,
transaction))
{
bulkCopy.BatchSize = 10;
bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns";
// Write from the source to the destination.
// This should fail with a duplicate key error.
try
{
bulkCopy.WriteToServer(reader);
transaction.Commit();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
transaction.Rollback();
}
finally
{
reader.Close();
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.