Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
        /// <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;
         }
     }
 }
Exemple #5
0
        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);
                }
            }
        }
Exemple #8
0
        /// <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;
            }
        }
Exemple #9
0
        /// <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);
            }
        }
Exemple #10
0
 /// <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());
 }
Exemple #11
0
 /// <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);
 }