gpt4 book ai didi

c# - SQLBulkCopy 上传失败时是否有任何数据?

转载 作者:行者123 更新时间:2023-11-30 16:13:07 34 4
gpt4 key购买 nike

我正在执行从 excel 电子表格到临时表的数据的 sql 批量复制,然后从临时表到生产数据库。

我的问题是,如果由于任何原因上传到临时表或生产数据库失败,事务是否回滚并且没有数据被导入或修改现有数据?

最佳答案

默认情况下 SqlBulkCopy 将回滚到 last batch你完成了。如果您的 BatchSize 为 0(默认值),它将在一个批处理中完成所有操作,但您可能会得到 a timeout如果批处理上传时间过长(默认 30 秒)。

另一种选择是将整个事物包装在外部交易中并将其传递给 constructor .这将在出现错误时回滚整个插入操作,而不仅仅是最后一批,这允许您使用较小的批处理,但仍然让整个插入成为单个事务。这也让您可以使用相同的事务将数据从临时登台表移动到您的实时数据中。

这是一个片段 taken from the MSDN

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();
}
}
}
}

关于c# - SQLBulkCopy 上传失败时是否有任何数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176359/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com