예제 #1
0
파일: EditForm.cs 프로젝트: weimingtom/pap2
        /// <summary>
        /// 保存脚本
        /// </summary>
        /// <returns>是否保存成功</returns>
        public bool DoSave()
        {
            bool saveSuccess = false;

            if (IsChanged) // 需要保存
            {
                string scriptName = m_filename;

                if (scriptName.IndexOf('\\') != -1)
                {
                    scriptName = scriptName.Substring(scriptName.LastIndexOf('\\') + 1);
                }

                switch (scriptType)
                {
                case "databaseFile":     // 数据库脚本文件
                {
                    DataBaseManager databaseManager = DataBaseManager.GetDataBaseManager();
                    string          strView         = "";
                    bool            bret            = databaseManager.SaveScriptData(this.FileName, this.NewScriptCode, out strView);

                    if (bret)
                    {
                        if (strView != this.NewScriptCode)
                        {
                            this.ScriptCode = databaseManager.GetBeforeOpen(strView, FileName);
                        }

                        this.ScriptCode = this.NewScriptCode;


                        this.Text = scriptName;
                        databaseManager.UnLockScript(this.ID);
                        bret          = true;
                        this.isLocked = false;
                    }

                    saveSuccess = bret;

                    break;
                }

                case "localFile":     // 本地脚本文件
                {
                    Helper.WriteStringToFile(NewScriptCode, m_filename);
                    this.ScriptCode = this.NewScriptCode;
                    this.Text       = scriptName;
                    saveSuccess     = true;

                    break;
                }

                default:
                {
                    break;
                }
                }
            }

            return(saveSuccess);
        }
예제 #2
0
        private void btnReplace_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("替换结果将不直接写入数据库,而且不能恢复,确认继续操作?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
            {
                return;
            }

            SetControlsEnabled(false);
            if (treePreview.Nodes.Count == 0)
            {
                MessageBox.Show("请先搜索出文件,再针对文件进行替换!");
                SetControlsEnabled(true);
                return;
            }

            DataBaseManager dbm = DataBaseManager.GetDataBaseManager();

            //第1步 检查锁
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file = tn_file.Tag as Hashtable;
                string    strID   = ht_file["id"].ToString();
                if (dbm.IsScriptLocked(strID))
                {
                    //文件锁了
                    MessageBox.Show("失败:文件[" + tn_file.Text + "]被正在被人编辑,无法启动替换。");
                    SetControlsEnabled(true);
                    return;
                }
            }

            //第2步 检查在选择过程中,选中项的服务器端数据变过没有
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file        = tn_file.Tag as Hashtable;
                string    strFileContent = ht_file["strFileContent"].ToString();
                string    strID          = ht_file["id"].ToString();
                if (strFileContent != dbm.GetScriptData(strID))
                {
                    //服务器端变过了
                    MessageBox.Show("失败:查找之后,替换之前,文件内容已变更,所以无法替换,请重新启动替换程序!");
                    SetControlsEnabled(true);
                    return;
                }
            }

            //第3步 锁定选择项
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file = tn_file.Tag as Hashtable;
                string    strID   = ht_file["id"].ToString();
                if (!dbm.LockScript(strID))
                {
                    MessageBox.Show("失败:检查一致性的过程中有人锁定了脚本,请迅速保存所有文件后重新运行脚本编辑器再次替换。");
                    SetControlsEnabled(true);
                    return;
                }
            }

            //第4步 替换选择项
            string strResult  = "";
            string strFind    = findTextBox.Text;
            string strReplace = replaceTextBox.Text;

            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file    = tn_file.Tag as Hashtable;
                string    strContent = "";
                foreach (TreeNode tnz in tn_file.Nodes)
                {
                    Hashtable ht_nodez = tnz.Tag as Hashtable;
                    strContent += ht_nodez["line_before"].ToString();
                    if (!tnz.Checked)
                    {
                        strContent += strFind;
                    }
                    else
                    {
                        strContent += strReplace;
                    }
                }
                strContent += ht_file["line_last"].ToString();
                string strView = "";
                bool   ret     = dbm.SaveScriptData(tn_file.Text, strContent, out strView);
                strResult += tn_file.Text + (ret ? "...OK\n" : "...NG\n");
            }

            //第5步 解锁选择项
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file = tn_file.Tag as Hashtable;
                string    strID   = ht_file["id"].ToString();
                if (!dbm.UnLockScript(strID))
                {
                    MessageBox.Show(strResult + "成功:替换完成后解锁失败,原因不明,请联系管理员");
                    SetControlsEnabled(true);
                    return;
                }
            }

            MessageBox.Show("替换完成!");//\n" + strResult);
            treePreview.Nodes.Clear();
            wbPriview.DocumentText = "";
            SetControlsEnabled(true);
        }