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(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)); if (processedTables.Contains(table, StringComparer.InvariantCultureIgnoreCase)) { continue; } xml.Add(new XElement(table)); DataTable dataTable = null; while (true) { try { dataTable = dbHelper.GetTable(table, tenant); 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; } } var tmp = Path.GetTempFileName(); using (var file = File.OpenWrite(tmp)) { dataTable.WriteXml(file, XmlWriteMode.WriteSchema); } writer.WriteEntry(string.Format("{0}\\{1}\\{2}", Name, connectionString.Name, table).ToLower(), tmp); File.Delete(tmp); processedTables.Add(table); } } return(xml); }
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); }