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); //一分钟刷新一次
                }
            });
        }
Exemplo n.º 2
0
        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; });
            });
        }
Exemplo n.º 3
0
        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; });
            });
        }