예제 #1
0
        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);
        }
예제 #2
0
        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);
        }