gpt4 book ai didi

c# - 如何在 bulkCopy.WriteToServer 后返回结果

转载 作者:行者123 更新时间:2023-11-30 14:58:24 24 4
gpt4 key购买 nike

更新基于已接受的答案:

bool success = false;
using (var bulkCopy = new SqlBulkCopy(connection)) //using!
{
connection.Open();

//explicit isolation level is best-practice
using (var tran = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
bulkCopy.DestinationTableName = "table";
bulkCopy.ColumnMappings...

using (var dataReader = new ObjectDataReader<SomeObject>(paths))
{
bulkCopy.WriteToServer(dataReader);
success = true;
}

tran.Commit(); //commit, will not be called if exception escapes
}
}
return success;

我使用 BulkCopy 类进行大插入,它工作正常。
执行WriteToServer 并将数据保存到数据库后
我不想知道所有数据是否已成功保存所以我可以返回true/false 因为我需要保存所有还是什么都没有?

    var bulkCopy = new SqlBulkCopy(connection);

bulkCopy.DestinationTableName = "table";

bulkCopy.ColumnMappings...

using (var dataReader = new ObjectDataReader<SomeObject>(paths))
{
try
{
bulkCopy.WriteToServer(dataReader);
}
catch(Exception ex){ ... }
}

最佳答案

如果对 WriteToServer 的调用无异常完成,则所有行都已保存并在磁盘上。这只是 SQL Server DML 的标准语义。批量复制没什么特别的。

与所有其他 DML 一样,SqlBulkCopy 也是全有或全无。除非您配置了您没有配置的批量大小。

using (var bulkCopy = new SqlBulkCopy(connection)) //using!
{
connection.Open();

//explicit isolation level is best-practice
using (var tran = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
bulkCopy.DestinationTableName = "table";
bulkCopy.ColumnMappings...

using (var dataReader = new ObjectDataReader<SomeObject>(paths))
{
//try
//{
bulkCopy.WriteToServer(dataReader, /*here you set some options*/);
//}
//catch(Exception ex){ ... } //you need no explicit try-catch here
}

tran.Commit(); //commit, will not be called if exception escapes
}
}

我已经为您添加了与最佳实践保持一致的示例代码。

关于c# - 如何在 bulkCopy.WriteToServer 后返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19114696/

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