private List<XElement> BackupDatabase(int tenant, ConnectionStringSettings connectionString, IDataWriteOperator writer) { var xml = new List<XElement>(); var errors = 0; var timeout = TimeSpan.FromSeconds(1); using (var dbHelper = new DbHelper(tenant, connectionString)) { var tables = dbHelper.GetTables(); for (int i = 0; i < tables.Count; i++) { var table = tables[i]; OnProgressChanged(table, (int)(i / (double)tables.Count * 100)); xml.Add(new XElement(table)); var stream = writer.BeginWriteEntry(string.Format("{0}\\{1}\\{2}", Name, connectionString.Name, table).ToLower()); DataTable dataTable = null; while (true) { try { dataTable = dbHelper.GetTable(table); break; } catch { errors++; if (20 < errors) throw; Thread.Sleep(timeout); } } foreach (DataColumn c in dataTable.Columns) { if (c.DataType == typeof(DateTime)) c.DateTimeMode = DataSetDateTime.Unspecified; } dataTable.WriteXml(stream, XmlWriteMode.WriteSchema); writer.EndWriteEntry(); } } return xml; }