/// <summary> /// 恢复数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RestoreMongoToolStripMenuItem_Click(object sender, EventArgs e) { String strTitle = "Restore"; String strMessage = "Are you sure to Restore?"; if (!SystemManager.IsUseDefaultLanguage) { strTitle = SystemManager.MStringResource.GetText( StringResource.TextType.Main_Menu_Operation_BackupAndRestore_Restore); strMessage = SystemManager.MStringResource.GetText(StringResource.TextType.Restore_Connection_Confirm); } if (!MyMessageBox.ShowConfirm(strTitle, strMessage)) { return; } if (!MongoPathCheck()) { return; } var MongoRestore = new MongodbDosCommand.StruMongoRestore(); MongoServerInstance Mongosrv = SystemManager.GetCurrentServer().Instance; MongoRestore.HostAddr = Mongosrv.Address.Host; MongoRestore.Port = Mongosrv.Address.Port; var dumpFile = new FolderBrowserDialog(); if (dumpFile.ShowDialog() == DialogResult.OK) { MongoRestore.DirectoryPerDB = dumpFile.SelectedPath; } String DosCommand = MongodbDosCommand.GetMongoRestoreCommandLine(MongoRestore); RunCommand(DosCommand); RefreshToolStripMenuItem_Click(null, null); }
/// <summary> /// Count /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void countToolStripMenuItem_Click(object sender, EventArgs e) { var Query = new DataFilter(); String ColPath = SystemManager.SelectTagData; Boolean IsUseFilter = false; if (_viewInfoList.ContainsKey(ColPath)) { Query = _viewInfoList[ColPath].mDataFilter; IsUseFilter = _viewInfoList[ColPath].IsUseFilter; } if (Query.QueryConditionList.Count == 0 || !IsUseFilter) { MyMessageBox.ShowEasyMessage("Count", "Count Result : " + SystemManager.GetCurrentCollection().Count()); } else { IMongoQuery mQuery = QueryHelper.GetQuery(Query.QueryConditionList); MyMessageBox.ShowMessage("Count", "Count[With DataView Filter]:" + SystemManager.GetCurrentCollection().Count(mQuery), mQuery.ToString(), true); } }
/// <summary> /// Import Collection /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ImportCollectionToolStripMenuItem_Click(object sender, EventArgs e) { String strTitle = "Import Collection"; String strMessage = "Are you sure to Import Collection?"; if (!SystemManager.IsUseDefaultLanguage) { strTitle = SystemManager.MStringResource.GetText(StringResource.TextType.Drop_Data); strMessage = SystemManager.MStringResource.GetText(StringResource.TextType.Drop_Data_Confirm); } if (!MyMessageBox.ShowConfirm(strTitle, strMessage)) { return; } if (!MongoPathCheck()) { return; } var MongoImportExport = new MongodbDosCommand.StruImportExport(); MongoServerInstance Mongosrv = SystemManager.GetCurrentServer().Instance; MongoImportExport.HostAddr = Mongosrv.Address.Host; MongoImportExport.Port = Mongosrv.Address.Port; MongoImportExport.DBName = SystemManager.GetCurrentDataBase().Name; MongoImportExport.CollectionName = SystemManager.GetCurrentCollection().Name; var dumpFile = new OpenFileDialog(); if (dumpFile.ShowDialog() == DialogResult.OK) { MongoImportExport.FileName = dumpFile.FileName; } MongoImportExport.Direct = MongodbDosCommand.ImprotExport.Import; String DosCommand = MongodbDosCommand.GetMongoImportExportCommandLine(MongoImportExport); RunCommand(DosCommand); }
/// <summary> /// OK /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmdOK_Click(object sender, EventArgs e) { if (txtCollectionName.Text != String.Empty) { try { String ErrMessage; SystemManager.GetCurrentDataBase().IsCollectionNameValid(txtCollectionName.Text, out ErrMessage); if (ErrMessage != null) { MyMessageBox.ShowMessage("Create MongoDatabase", "Argument Exception", ErrMessage, true); return; } if (chkAdvance.Checked) { CollectionOptionsBuilder option = new CollectionOptionsBuilder(); option.SetCapped(chkIsCapped.Checked); option.SetMaxSize((long)numMaxSize.Value); option.SetMaxDocuments((long)numMaxDocument.Value); //CappedCollection Default is AutoIndexId After MongoDB 2.2.2 option.SetAutoIndexId(chkIsAutoIndexId.Checked); Result = MongoDBHelper.CreateCollectionWithOptions(strSvrPathWithTag, treeNode, txtCollectionName.Text, option); } else { Result = MongoDBHelper.CreateCollection(strSvrPathWithTag, treeNode, txtCollectionName.Text); } this.Close(); } catch (ArgumentException ex) { SystemManager.ExceptionDeal(ex, "Create MongoDatabase", "Argument Exception"); Result = false; } } }
private void PutQueryToUI(DataFilter NewDataFilter) { String strErrMsg = String.Empty; List <String> ShowColumnList = new List <String>(); foreach (String item in ColumnList) { ShowColumnList.Add(item); } //清除所有的控件 tabFieldInfo.Controls.Clear(); foreach (DataFilter.QueryFieldItem queryFieldItem in NewDataFilter.QueryFieldList) { //动态加载控件 if (!ColumnList.Contains(queryFieldItem.ColName)) { strErrMsg += queryFieldItem.ColName + "Display Field is not exist in current collection any more" + System.Environment.NewLine; } else { ctlFieldInfo ctrItem = new ctlFieldInfo(); ctrItem.Name = queryFieldItem.ColName; ctrItem.Location = _conditionPos; ctrItem.QueryFieldItem = queryFieldItem; tabFieldInfo.Controls.Add(ctrItem); //纵向位置的累加 _conditionPos.Y += ctrItem.Height; ShowColumnList.Remove(queryFieldItem.ColName); } } //新增字段 _conditionPos = new Point(5, 0); foreach (String item in ShowColumnList) { strErrMsg += "New Field" + item + "Is Append" + System.Environment.NewLine; //输出配置的初始化 DataFilter.QueryFieldItem queryFieldItem = new DataFilter.QueryFieldItem(); queryFieldItem.ColName = item; queryFieldItem.IsShow = true; queryFieldItem.sortType = DataFilter.SortType.NoSort; //动态加载控件 ctlFieldInfo ctrItem = new ctlFieldInfo(); ctrItem.Name = item; _conditionPos.Y += ctrItem.Height; ctrItem.Location = _conditionPos; ctrItem.QueryFieldItem = queryFieldItem; tabFieldInfo.Controls.Add(ctrItem); } panFilter.Controls.Clear(); _conditionPos = new Point(5, 0); _conditionCount = 0; foreach (DataFilter.QueryConditionInputItem queryConditionItem in NewDataFilter.QueryConditionList) { ctlQueryCondition newCondition = new ctlQueryCondition(); newCondition.Init(ColumnList); _conditionPos.Y += newCondition.Height; newCondition.Location = _conditionPos; newCondition.ConditionItem = queryConditionItem; _conditionCount++; newCondition.Name = "Condition" + _conditionCount.ToString(); panFilter.Controls.Add(newCondition); if (!ColumnList.Contains(queryConditionItem.ColName)) { strErrMsg += queryConditionItem.ColName + "Query Condition Field is not exist in collection any more" + System.Environment.NewLine; } } if (strErrMsg != String.Empty) { MyMessageBox.ShowMessage("Load Exception", "A Exception is happened when loading", strErrMsg, true); } }
/// <summary> /// 增加索引 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmdAddIndex_Click(object sender, EventArgs e) { var AscendingKey = new List <String>(); var DescendingKey = new List <String>(); String GeoSpatialKey = string.Empty; String FirstKey = string.Empty; String TextKey = String.Empty; for (int i = 0; i < 5; i++) { var ctl = (ctlIndexCreate)Controls.Find("ctlIndexCreate" + (i + 1), true)[0]; if (ctl.KeyName == String.Empty) { continue; } FirstKey = ctl.KeyName.Trim(); switch (ctl.IndexKeyType) { case MongoDbHelper.IndexType.Ascending: AscendingKey.Add(ctl.KeyName.Trim()); break; case MongoDbHelper.IndexType.Descending: DescendingKey.Add(ctl.KeyName.Trim()); break; case MongoDbHelper.IndexType.GeoSpatial: GeoSpatialKey = ctl.KeyName.Trim(); break; case MongoDbHelper.IndexType.Text: TextKey = ctl.KeyName.Trim(); break; default: break; } } var option = new IndexOptionsBuilder(); option.SetBackground(chkIsBackground.Checked); option.SetDropDups(chkIsDroppedDups.Checked); option.SetSparse(chkIsSparse.Checked); option.SetUnique(chkIsUnique.Checked); if (chkExpireData.Checked) { //TTL的限制条件很多 //http://docs.mongodb.org/manual/tutorial/expire-data/ //不能是组合键 Boolean CanUseTTL = true; if ((AscendingKey.Count + DescendingKey.Count + (String.IsNullOrEmpty(GeoSpatialKey) ? 0 : 1)) != 1) { MyMessageBox.ShowMessage("Can't Set TTL", "the TTL index may not be compound (may not have multiple fields)."); CanUseTTL = false; } else { //不能是_id if (FirstKey == MongoDbHelper.KEY_ID) { MyMessageBox.ShowMessage("Can't Set TTL", "you cannot create this index on the _id field, or a field that already has an index."); CanUseTTL = false; } } if (SystemManager.GetCurrentCollection().IsCapped()) { MyMessageBox.ShowMessage("Can't Set TTL", "you cannot use a TTL index on a capped collection, because MongoDB cannot remove documents from a capped collection."); CanUseTTL = false; } if (CanUseTTL) { MyMessageBox.ShowMessage("Constraints", "Constraints Of TimeToLive", "the indexed field must be a date BSON type. If the field does not have a date type, the data will not expire." + Environment.NewLine + "if the field holds an array, and there are multiple date-typed data in the index, the document will expire when the lowest (i.e. earliest) matches the expiration threshold.", true); option.SetTimeToLive(new TimeSpan(0, 0, (int)numTTL.Value)); } } if (txtIndexName.Text != String.Empty && !SystemManager.GetCurrentCollection().IndexExists(txtIndexName.Text) && (AscendingKey.Count + DescendingKey.Count + (String.IsNullOrEmpty(GeoSpatialKey) ? 0 : 1) + (String.IsNullOrEmpty(TextKey) ? 0 : 1)) != 0) { option.SetName(txtIndexName.Text); try { //暂时要求只能一个TextKey if (!string.IsNullOrEmpty(TextKey)) { var TextKeysDoc = new IndexKeysDocument { { TextKey, "text" } }; SystemManager.GetCurrentCollection().CreateIndex(TextKeysDoc, option); } else { MongoDbHelper.CreateMongoIndex(AscendingKey.ToArray(), DescendingKey.ToArray(), GeoSpatialKey, option); } MyMessageBox.ShowMessage("Index Add Completed!", "IndexName:" + txtIndexName.Text + " is add to collection."); } catch (Exception ex) { SystemManager.ExceptionDeal(ex, "Index Add Failed!", "IndexName:" + txtIndexName.Text); } RefreshList(); } else { MyMessageBox.ShowMessage("Index Add Failed!", "Please Check the index information."); } }
/// <summary> /// 新建连接 /// </summary> private void CreateConnection() { ModifyConn.ConnectionName = txtConnectionName.Text; ///感谢 呆呆 的Bug 报告,不论txtConnectionString.Text是否存在都进行赋值,防止删除字符后,值还是保留的BUG ModifyConn.ConnectionString = txtConnectionString.Text; if (txtConnectionString.Text != String.Empty) { String strException = MongoDBHelper.FillConfigWithConnectionString(ref ModifyConn); if (strException != String.Empty) { MyMessageBox.ShowMessage("Url Exception", "Url Formation,please check it", strException); return; } ; } else { ModifyConn.Host = txtHost.Text; if (numPort.Text != String.Empty) { ModifyConn.Port = Convert.ToInt32(numPort.Text); } ModifyConn.UserName = txtUsername.Text; ModifyConn.Password = txtPassword.Text; ModifyConn.DataBaseName = txtDataBaseName.Text; //仅有用户名或密码 if (txtUsername.Text != String.Empty && txtPassword.Text == String.Empty) { MessageBox.Show("Please Input Password"); return; } if (txtUsername.Text == String.Empty && txtPassword.Text != String.Empty) { MessageBox.Show("Please Input UserName"); return; } //数据库名称存在,则必须输入用户名和密码 if (txtDataBaseName.Text != String.Empty) { //用户名或者密码为空 if (txtUsername.Text == String.Empty || txtPassword.Text == String.Empty) { MessageBox.Show("Please Input UserName or Password"); return; } } ModifyConn.socketTimeoutMS = (double)NumSocketTimeOut.Value; ModifyConn.connectTimeoutMS = (double)NumConnectTimeOut.Value; ModifyConn.wtimeoutMS = (double)NumWTimeoutMS.Value; ModifyConn.WaitQueueSize = (int)NumWaitQueueSize.Value; ModifyConn.journal = chkJournal.Checked; ModifyConn.fsync = chkFsync.Checked; ModifyConn.IsSlaveOk = chkSlaveOk.Checked; ModifyConn.IsSafeMode = chkSafeMode.Checked; ModifyConn.ReplSetName = txtReplsetName.Text; ModifyConn.ReplsetList = new List <string>(); foreach (String item in lstHost.Items) { ModifyConn.ReplsetList.Add(item); } } }
/// <summary> /// 重命名数据集 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RenameCollectionToolStripMenuItem_Click(object sender, EventArgs e) { String strPath = SystemManager.SelectTagData; String strCollection = strPath.Split("/".ToCharArray())[(int)MongoDbHelper.PathLv.CollectionLv]; String strNewCollectionName = String.Empty; if (SystemManager.IsUseDefaultLanguage) { strNewCollectionName = MyMessageBox.ShowInput("Please input new collection name:", "Rename collection", strCollection); } else { strNewCollectionName = MyMessageBox.ShowInput( SystemManager.MStringResource.GetText(StringResource.TextType.Rename_Collection_Input), SystemManager.MStringResource.GetText(StringResource.TextType.Rename_Collection)); } if (String.IsNullOrEmpty(strNewCollectionName) || !SystemManager.GetCurrentDataBase() .RenameCollection(trvsrvlst.SelectedNode.Text, strNewCollectionName) .Ok) { return; } String strNodeData = SystemManager.SelectTagData; String strNewNodeTag = SystemManager.SelectObjectTag.Substring(0, SystemManager.SelectObjectTag.Length - SystemManager.GetCurrentCollection().Name.Length); strNewNodeTag += strNewCollectionName; String strNewNodeData = SystemManager.GetTagData(strNewNodeTag); if (_viewTabList.ContainsKey(strNodeData)) { TabPage DataTab = _viewTabList[strNodeData]; foreach (ToolStripMenuItem item in collectionToolStripMenuItem.DropDownItems) { if (item.Tag == DataTab.Tag) { item.Text = strNewCollectionName; item.Tag = strNewNodeTag; break; } } DataTab.Text = strNewCollectionName; DataTab.Tag = strNewNodeTag; //Change trvsrvlst.SelectedNode _viewTabList.Add(strNewNodeData, _viewTabList[strNodeData]); _viewTabList.Remove(strNodeData); _viewInfoList.Add(strNewNodeData, _viewInfoList[strNodeData]); _viewInfoList.Remove(strNodeData); } DisableAllOpr(); SystemManager.SelectObjectTag = strNewNodeTag; trvsrvlst.SelectedNode.Text = strNewCollectionName; trvsrvlst.SelectedNode.Tag = strNewNodeTag; trvsrvlst.SelectedNode.ToolTipText = strNewCollectionName + Environment.NewLine; trvsrvlst.SelectedNode.ToolTipText += "IsCapped:" + SystemManager.GetCurrentCollection().GetStats().IsCapped; if (SystemManager.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "selected Collection:" + SystemManager.SelectTagData; } else { statusStripMain.Items[0].Text = SystemManager.MStringResource.GetText(StringResource.TextType.Selected_Collection) + ":" + SystemManager.SelectTagData; } }
/// <summary> /// Drop MongoDB /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DelMongoDBToolStripMenuItem_Click(object sender, EventArgs e) { String strTitle = "Drop Database"; String strMessage = "Are you really want to Drop current Database?"; if (!SystemManager.IsUseDefaultLanguage) { strTitle = SystemManager.MStringResource.GetText(StringResource.TextType.Drop_DataBase); strMessage = SystemManager.MStringResource.GetText(StringResource.TextType.Drop_DataBase_Confirm); } if (!MyMessageBox.ShowConfirm(strTitle, strMessage)) { return; } String strPath = SystemManager.SelectTagData; String strDBName = strPath.Split("/".ToCharArray())[(int)MongoDbHelper.PathLv.DatabaseLv]; if (trvsrvlst.SelectedNode == null) { trvsrvlst.SelectedNode = null; } String rtnResult = MongoDbHelper.DataBaseOpration(SystemManager.SelectObjectTag, strDBName, MongoDbHelper.Oprcode.Drop, trvsrvlst.SelectedNode); if (String.IsNullOrEmpty(rtnResult)) { DisableAllOpr(); //关闭所有的相关视图 //foreach不能直接修改,需要一个备份 var tempTable = new Dictionary <string, TabPage>(); foreach (String item in _viewTabList.Keys) { tempTable.Add(item, _viewTabList[item]); } foreach (String KeyItem in tempTable.Keys) { //如果有相同的前缀 if (KeyItem.StartsWith(strPath)) { ToolStripMenuItem DataMenuItem = null; foreach (ToolStripMenuItem Menuitem in collectionToolStripMenuItem.DropDownItems) { //菜单的寻找 if (Menuitem.Tag == _viewTabList[KeyItem].Tag) { DataMenuItem = Menuitem; } } if (DataMenuItem != null) { //菜单的删除 collectionToolStripMenuItem.DropDownItems.Remove(DataMenuItem); } //TabPage的删除 tabView.Controls.Remove(_viewTabList[KeyItem]); _viewTabList.Remove(KeyItem); _viewInfoList.Remove(KeyItem); _viewTabList[KeyItem] = null; } } tempTable = null; } else { MyMessageBox.ShowMessage("Error", "Error", rtnResult, true); } }
/// <summary> /// About /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AboutToolStripMenuItem_Click(object sender, EventArgs e) { MyMessageBox.ShowMessage("About", "MagicCola", GetResource.GetImage(ImageType.Smile), new StreamReader("Release Note.txt").ReadToEnd()); }
/// <summary> /// 保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { MongoDbHelper.ActionDone += (x, y) => MyMessageBox.ShowMessage("Export", y.Message); MongoDbHelper.ExportToFile(_viewinfo, ctlExportFilePicker.SelectedPathOrFileName, _exportType); }