public async Task ExportTable(ExportProgressArgs ea) { try { DBETable table = ea.Table; if ((mode & ExportMode.Patch) != ExportMode.Patch) { table.SourceTable.Clear(); table.TargetTable.Clear(); } using (var transacton = new DBTransaction(table.SourceTable.Connection)) { ea.Current = 0; ea.Count = table.SourceTable.GetRowCount(transacton, table.Query); ea.Description = null; OnExportProgress(ea); using (transacton.Reader = transacton.ExecuteQuery(table.SourceTable.CreateQuery(table.Query, null), DBExecuteType.Reader) as IDataReader) { table.SourceTable.CheckColumns(transacton); while (transacton.Reader.Read()) { if (ea.Cancel) { transacton.Cancel(); return; } var row = table.SourceTable.LoadItemFromReader(transacton); var newRow = ExportRow(table, row); await table.TargetTable.SaveItem(newRow, null); ea.Current++; ea.Row = newRow; OnExportProgress(ea); if ((mode & ExportMode.Patch) != ExportMode.Patch) { table.SourceTable.Clear(); table.TargetTable.Clear(); } } transacton.Reader.Close(); } transacton.Commit(); } } catch (Exception ex) { ea.Exception = ex; OnExportProgress(ea); } }