public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_directory)) { _directory = $"backup/{DateTime.Now:yyyy-MM-dd}"; } if (string.IsNullOrEmpty(_webConfigFileName)) { _webConfigFileName = "web.config"; } var treeInfo = new TreeInfo(_directory); DirectoryUtils.CreateDirectoryIfNotExists(treeInfo.DirectoryPath); WebConfigUtils.Load(CliUtils.PhysicalApplicationPath, _webConfigFileName); Console.WriteLine($"Database Type: {WebConfigUtils.DatabaseType.Value}"); Console.WriteLine($"Connection String: {WebConfigUtils.ConnectionString}"); Console.WriteLine($"Backup Directory: {treeInfo.DirectoryPath}"); var tableNames = DataProvider.DatabaseDao.GetTableNameList(); FileUtils.WriteText(treeInfo.TablesFilePath, Encoding.UTF8, TranslateUtils.JsonSerialize(tableNames)); CliUtils.PrintLine(); CliUtils.PrintRow("Backup Table Name", "Total Count"); CliUtils.PrintLine(); foreach (var tableName in tableNames) { var tableInfo = new TableInfo { Columns = DataProvider.DatabaseDao.GetTableColumnInfoListLowercase(WebConfigUtils.ConnectionString, tableName), TotalCount = DataProvider.DatabaseDao.GetCount(tableName), RowFiles = new List <string>() }; CliUtils.PrintRow(tableName, tableInfo.TotalCount.ToString("#,0")); var identityColumnName = DataProvider.DatabaseDao.AddIdentityColumnIdIfNotExists(tableName, tableInfo.Columns); if (tableInfo.TotalCount > 0) { var current = 1; if (tableInfo.TotalCount > CliUtils.PageSize) { var pageCount = (int)Math.Ceiling((double)tableInfo.TotalCount / CliUtils.PageSize); for (; current <= pageCount; current++) { CliUtils.PrintProgressBar(current - 1, pageCount); var fileName = $"{current}.json"; tableInfo.RowFiles.Add(fileName); var offset = (current - 1) * CliUtils.PageSize; var limit = CliUtils.PageSize; var rows = DataProvider.DatabaseDao.GetPageObjects(tableName, identityColumnName, offset, limit); FileUtils.WriteText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8, TranslateUtils.JsonSerialize(rows)); } CliUtils.PrintProgressBarEnd(); } else { var fileName = $"{current}.json"; tableInfo.RowFiles.Add(fileName); var rows = DataProvider.DatabaseDao.GetObjects(tableName); FileUtils.WriteText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8, TranslateUtils.JsonSerialize(rows)); } } FileUtils.WriteText(treeInfo.GetTableMetadataFilePath(tableName), Encoding.UTF8, TranslateUtils.JsonSerialize(tableInfo)); } CliUtils.PrintLine(); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }
public static void Execute(string[] args) { if (!CliUtils.ParseArgs(Options, args)) { return; } if (_isHelp) { PrintUsage(); return; } if (string.IsNullOrEmpty(_directory)) { _directory = $"backup/{DateTime.Now:yyyy-MM-dd}"; } if (string.IsNullOrEmpty(_webConfigFileName)) { _webConfigFileName = "web.config"; } var treeInfo = new TreeInfo(_directory); if (!DirectoryUtils.IsDirectoryExists(treeInfo.DirectoryPath)) { CliUtils.PrintError($"Error, Directory {treeInfo.DirectoryPath} Not Exists"); return; } var tablesFilePath = treeInfo.TablesFilePath; if (!FileUtils.IsFileExists(tablesFilePath)) { CliUtils.PrintError($"Error, File {treeInfo.TablesFilePath} Not Exists"); return; } WebConfigUtils.Load(CliUtils.PhysicalApplicationPath, _webConfigFileName); Console.WriteLine($"Database Type: {WebConfigUtils.DatabaseType.Value}"); Console.WriteLine($"Connection String: {WebConfigUtils.ConnectionString}"); Console.WriteLine($"Restore Directory: {treeInfo.DirectoryPath}"); var tableNames = TranslateUtils.JsonDeserialize <List <string> >(FileUtils.ReadText(tablesFilePath, Encoding.UTF8)); CliUtils.PrintLine(); CliUtils.PrintRow("Import Table Name", "Total Count"); CliUtils.PrintLine(); var logs = new List <TextLogInfo>(); foreach (var tableName in tableNames) { var metadataFilePath = treeInfo.GetTableMetadataFilePath(tableName); if (!FileUtils.IsFileExists(metadataFilePath)) { continue; } var tableInfo = TranslateUtils.JsonDeserialize <TableInfo>(FileUtils.ReadText(metadataFilePath, Encoding.UTF8)); CliUtils.PrintRow(tableName, tableInfo.TotalCount.ToString("#,0")); if (!DataProvider.DatabaseDao.IsTableExists(tableName)) { DataProvider.DatabaseDao.CreateSystemTable(tableName, tableInfo.Columns); } else { DataProvider.DatabaseDao.AlterSystemTable(tableName, tableInfo.Columns); } for (var i = 0; i < tableInfo.RowFiles.Count; i++) { CliUtils.PrintProgressBar(i, tableInfo.RowFiles.Count); var fileName = tableInfo.RowFiles[i]; var objects = TranslateUtils.JsonDeserialize <List <JObject> >(FileUtils.ReadText(treeInfo.GetTableContentFilePath(tableName, fileName), Encoding.UTF8)); try { DataProvider.DatabaseDao.InsertMultiple(tableName, objects, tableInfo.Columns); } catch (Exception ex) { logs.Add(new TextLogInfo { DateTime = DateTime.Now, Detail = $"tableName {tableName}, fileName {fileName}", Exception = ex }); } } CliUtils.PrintProgressBarEnd(); } CliUtils.PrintLine(); SystemManager.SyncDatabase(); CliUtils.LogErrors(CommandName, logs); Console.WriteLine("Well done! Thanks for Using SiteServer Cli Tool"); }