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