/// <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); }
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); }