private void RefeshToken() { WpfTask.FactoryStartNew(() => { while (true) { if (AppId.IsNotNullOrEmpty() && AppSecret.IsNotNullOrEmpty()) { var token = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret); UiThread.Invoke(() => { CurrentToken = token; }); } Thread.Sleep(1000 * 60); //一分钟刷新一次 } }); }
public void CompareDB() { //储存AppSeting var builderSetting = AppSetting.LoadData(); builderSetting.SourceDbPath = appInfo.SourceDbPath; builderSetting.TargetDbPath = appInfo.TargetDbPath; builderSetting.NeedCompareIndex = appInfo.NeedCompareIndex; builderSetting.SaveData(); WpfTask.FactoryStartNew(() => { UIThread.Invoke(() => { IsComparing = true; }); _service.CompareDBTable(); if (new AppInfo().NeedCompareIndex) { _service.CompareDBIndex(); } UIThread.Invoke(ConvertToCompareResult); UIThread.Invoke(() => { IsComparing = false; }); }); }
public void RepairDB() { if (_service.DifTableList == null && _service.DifIndexList == null) { return; } var repareCmdList = new List <string>(); #region 修复表 var tableList = _service.DifTableList; var IndexList = _service.DifIndexList; #region 修复字段 WpfTask.FactoryStartNew(() => { UIThread.Invoke(() => { IsRepairing = true; }); /*先删除字段 在新增 * //SQLite 没有原生的删除字段的方法 只能变通 * //把除了需要删除的字段意外的字段缓存,删除原表,重命名新表为旧表名*/ //字段冗余 foreach (var info in tableList.Where(x => x.MoreCol != null && x.MoreCol.Any())) { //需要缓存的字段 var copycol = string.Empty; foreach (var colinfo in info.TargetCol) { if (info.MoreCol.Any(x => x.Name == colinfo.Name)) { continue; } copycol = copycol + colinfo.Name + ","; } if (copycol.Length > 0) { copycol = copycol.Substring(0, copycol.Length - 1); } var cmdBuilder = new StringBuilder(); cmdBuilder.AppendLine(string.Format("Create Table {0}_TempNew as Select {1} from {0};", info.TargetInfo.name, copycol)); cmdBuilder.AppendLine(string.Format("Drop table if Exists {0};", info.TargetInfo.name)); cmdBuilder.AppendLine(string.Format("Alter table {0}_TempNew Rename to {0};", info.TargetInfo.name)); repareCmdList.Add(cmdBuilder.ToString()); } //缺少字段 foreach (var info in tableList.Where(x => x.LostCol != null && x.LostCol.Any())) { foreach (var lost in info.LostCol) { var cmdBuilder = new StringBuilder(); var notnull = string.Empty; if (lost.NotNull != "0") { notnull = "not null"; } var defaultValue = string.Empty; if (lost.Dflt_Value != null) { defaultValue = "default " + "'" + lost.Dflt_Value + "'"; } cmdBuilder.AppendLine(string.Format("Alter table {0} add column {1} {2} {3} {4};", info.SourceInfo.name, lost.Name, lost.Type, notnull, defaultValue)); repareCmdList.Add(cmdBuilder.ToString()); } } //缺少表 repareCmdList.AddRange(tableList.Where(x => x.ErrorType == 2).Select(info => info.SourceInfo.sql)); //表冗余 repareCmdList.AddRange( tableList.Where(x => x.ErrorType == 3) .Select(info => string.Format("Drop table if Exists {0} ", info.TargetInfo.name))); #endregion #endregion #region 修复索引 //缺少索引 repareCmdList.AddRange(IndexList.Where(x => x.ErrorType == 2).Select(info => info.SourceInfo.sql)); //索引 冗余 repareCmdList.AddRange( IndexList.Where(x => x.ErrorType == 3) .Select(info => string.Format("Drop INDEX if Exists {0} ", info.TargetInfo.name))); #endregion _service.RepairDb(repareCmdList, tmp => { #if DEBUG Thread.Sleep(100); #endif UIThread.Invoke(() => { RepairedNum = tmp; }); }); UIThread.Invoke(() => { IsRepairing = false; }); }); }