我在将大量记录插入 Sql 服务器表时遇到问题。我通过使用 SqlBulkCopy 解决了这个问题。现在我能够很快地插入记录。
我有疑问,如果在插入记录时任何事务失败,我必须重试相同的操作 3 次。我们如何使用 SqlBulkCopy 实现重试逻辑?
using (var connection = DatabaseOperations.CreateConnection(ConnectString))
{
connection.Open();
var transaction = connection.BeginTransaction();
try
{
var dt = new DataTable();
dt.Columns.Add("EmployeeID");
dt.Columns.Add("Name");
for (var i = 1; i < 1000000; i++)
dt.Rows.Add(i + 1, "Name " + i + 1);
using (var sqlBulk = new SqlBulkCopy(connection,SqlBulkCopyOptions.Default, transaction as SqlTransaction))
{
sqlBulk.DestinationTableName = "Employees";
sqlBulk.BatchSize = 100000;
sqlBulk.WriteToServer(dt);
}
}
catch (SqlException ex)
{
transaction.Rollback();
throw new CustomException("SQL Exception", ex);
}
catch (Exception e)
{
transaction.Rollback();
throw;
}
transaction.Commit();
}