/// <summary> /// 运行插件 /// </summary> /// <param name="PlugInKeyCode"></param> public static void RunPlugIn(string PlugInKeyCode) { Assembly mAssem = Assembly.LoadFile(Application.StartupPath + @"\PlugIn\" + PlugInKeyCode + ".dll"); String TypeName = PlugInKeyCode; Type mType = mAssem.GetType(TypeName + "." + TypeName); ConstructorInfo ConstructorInfo = mType.GetConstructor(new Type[] {}); var mPlug = (PlugBase)ConstructorInfo.Invoke(new object[] {}); switch (PlugInList[PlugInKeyCode].RunLv) { case PlugBase.PathLv.ConnectionLV: mPlug.PlugObj = SystemManager.GetCurrentServer(); break; case PlugBase.PathLv.InstanceLV: mPlug.PlugObj = SystemManager.GetCurrentServer(); break; case PlugBase.PathLv.DatabaseLV: mPlug.PlugObj = SystemManager.GetCurrentDataBase(); break; case PlugBase.PathLv.CollectionLV: mPlug.PlugObj = SystemManager.GetCurrentCollection(); break; case PlugBase.PathLv.DocumentLV: break; default: break; } mPlug.Run(); }
/// <summary> /// 下载文件 /// </summary> /// <param name="strFileName"></param> public static void DownloadFile(String strLocalFileName, String strRemoteFileName) { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); MongoGridFS gfs = mongoDB.GetGridFS(new MongoGridFSSettings()); gfs.Download(strLocalFileName, strRemoteFileName); }
///在使用GirdFileSystem的时候,请注意: ///1.Windows 系统的文件名不区分大小写,不过,filename一定是区分大小写的,如果大小写不匹配的话,会发生无法找到文件的问题 ///2.Download的时候,不能使用SlaveOk选项! /// <summary> /// 打开文件 /// </summary> /// <param name="strFileName"></param> public static void OpenFile(String strRemoteFileName) { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); MongoGridFS gfs = mongoDB.GetGridFS(new MongoGridFSSettings()); String[] strLocalFileName = strRemoteFileName.Split(System.IO.Path.DirectorySeparatorChar); try { if (!Directory.Exists(TempFileFolder)) { Directory.CreateDirectory(TempFileFolder); } String LocalFileName = TempFileFolder + System.IO.Path.DirectorySeparatorChar + strLocalFileName[strLocalFileName.Length - 1]; gfs.Download(LocalFileName, strRemoteFileName); System.Diagnostics.Process.Start(LocalFileName); } catch (System.ComponentModel.Win32Exception) { MyMessageBox.ShowEasyMessage("Error", "No Program can open this file"); } catch (Exception ex) { SystemManager.ExceptionDeal(ex, "Error", "Exception happend when open file"); } }
/// <summary> /// 删除文件 /// </summary> /// <param name="strFileName"></param> public static void DelFile(String strFileName) { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); MongoGridFS gfs = mongoDB.GetGridFS(new MongoGridFSSettings()); gfs.Delete(strFileName); }
/// <summary> /// Js数据集初始化 /// </summary> public static void InitJavascript() { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); if (!mongoDB.CollectionExists(COLLECTION_NAME_JAVASCRIPT)) { mongoDB.CreateCollection(COLLECTION_NAME_JAVASCRIPT); } }
/// <summary> /// 数据库User初始化 /// </summary> public static void InitDBUser() { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); if (!mongoDB.CollectionExists(COLLECTION_NAME_USER)) { mongoDB.CreateCollection(COLLECTION_NAME_USER); } }
/// <summary> /// GFS初始化 /// </summary> public static void InitGFS() { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); if (!mongoDB.CollectionExists(COLLECTION_NAME_GFS_FILES)) { mongoDB.CreateCollection(COLLECTION_NAME_GFS_FILES); } }
/// <summary> /// Remove User /// </summary> /// <param name="strUser">Username</param> public static void RemoveUserFromDB(String strUser) { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); if (mongoDB.FindUser(strUser) != null) { mongoDB.RemoveUser(strUser); } }
/// <summary> /// 获得用户当前角色 /// </summary> /// <returns></returns> public static BsonArray GetCurrentDBRoles() { BsonArray Roles = new BsonArray(); String ConnectionName = SystemManager.GetCurrentServerConfig().ConnectionName; String DBName = SystemManager.GetCurrentDataBase().Name; Roles = _mongoUserLst[ConnectionName].GetRolesByDBName(DBName); return(Roles); }
/// <summary> /// Add User /// </summary> /// <param name="strUser">Username</param> /// <param name="password">Password</param> /// <param name="isReadOnly">Is ReadOnly</param> public static void AddUserToDB(String strUser, String password, Boolean isReadOnly) { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); MongoUser newUser = new MongoUser(strUser, password, false); if (mongoDB.FindUser(strUser) == null) { mongoDB.AddUser(newUser); } }
/// <summary> /// 当前对象的MONGO命令 /// </summary> /// <param name="mMongoCommand">命令对象</param> /// <param name="ShowMsgBox"></param> /// <returns></returns> public static CommandResult ExecuteMongoCommand(MongoCommand mMongoCommand, Boolean ShowMsgBox = true) { var ResultCommandList = new List <CommandResult>(); var mCommandResult = new CommandResult(new BsonDocument()); try { switch (mMongoCommand.RunLevel) { case MongoDbHelper.PathLv.CollectionLv: if (String.IsNullOrEmpty(mMongoCommand.CommandString)) { mCommandResult = ExecuteMongoColCommand(mMongoCommand.cmdDocument, SystemManager.GetCurrentCollection()); } else { mCommandResult = ExecuteMongoColCommand(mMongoCommand.CommandString, SystemManager.GetCurrentCollection()); } break; case MongoDbHelper.PathLv.DatabaseLv: mCommandResult = ExecuteMongoDBCommand(mMongoCommand.cmdDocument, SystemManager.GetCurrentDataBase()); break; case MongoDbHelper.PathLv.InstanceLv: mCommandResult = ExecuteMongoSvrCommand(mMongoCommand.cmdDocument, SystemManager.GetCurrentServer()); break; default: break; } ResultCommandList.Add(mCommandResult); if (ShowMsgBox) { MyMessageBox.ShowMessage(mMongoCommand.CommandString, mMongoCommand.CommandString + " Result", MongoDbHelper.ConvertCommandResultlstToString(ResultCommandList), true); } } catch (IOException ex) { SystemManager.ExceptionDeal(ex, mMongoCommand.CommandString, "IOException,Try to set Socket TimeOut more long at connection config"); } catch (Exception ex) { SystemManager.ExceptionDeal(ex, mMongoCommand.CommandString); } return(mCommandResult); }
/// <summary> /// Remove A User From Admin database /// </summary> /// <param name="strUser">UserName</param> public static void RemoveUserFromSystem(String strUser, Boolean IsAdmin) { MongoServer mongoSvr = SystemManager.GetCurrentServer(); MongoCollection users; if (IsAdmin) { users = mongoSvr.GetDatabase(DATABASE_NAME_ADMIN).GetCollection(MongoDBHelper.COLLECTION_NAME_USER); } else { users = SystemManager.GetCurrentDataBase().GetCollection(MongoDBHelper.COLLECTION_NAME_USER); } users.Remove(MongoDB.Driver.Builders.Query.EQ("user", strUser)); }
/// <summary> /// 当前对象的MONGO命令 /// </summary> /// <param name="cmd">命令对象</param> /// <returns></returns> public static void ExecuteMongoCommand(MongoCommand cmd) { var Command = new CommandDocument { { cmd.CommandString, 1 } }; List <CommandResult> ResultCommandList = new List <CommandResult>(); CommandResult rtn = new CommandResult(); try { switch (cmd.RunLevel) { case PathLv.CollectionLV: rtn = ExecuteMongoColCommand(cmd.CommandString, SystemManager.GetCurrentCollection()); break; case PathLv.DatabaseLV: rtn = ExecuteMongoDBCommand(Command, SystemManager.GetCurrentDataBase()); break; case PathLv.ServerLV: rtn = ExecuteMongoSvrCommand(Command, SystemManager.GetCurrentServer()); break; default: break; } ResultCommandList.Add(rtn); MyMessageBox.ShowMessage(cmd.CommandString, cmd.CommandString + " Result", MongoDBHelper.ConvertCommandResultlstToString(ResultCommandList), true); } catch (System.IO.IOException ex) { MyMessageBox.ShowMessage(cmd.CommandString, "IOException,Try to set Socket TimeOut more long at connection config", ex.ToString(), true); } catch (Exception ex) { SystemManager.ExceptionDeal(ex, cmd.CommandString); } }
//这里有个漏洞,对于数据库来说,对于local的验证和对于admin的验证是相同的。 //如果是加入用户到服务器中,是加入到local还是admin,需要考虑一下。 /// <summary> /// AddUserToSystem /// </summary> /// <param name="newUserEx">用户信息</param> /// <param name="IsAdmin">是否是Admin</param> public static void AddUserToSystem(MongoUserEx newUserEx, Boolean IsAdmin) { MongoServer mongoSvr = SystemManager.GetCurrentServer(); //必须使用MongoCredentials来添加用户,不然的话,Password将使用明文登入到数据库中! //这样的话,在使用MongoCredentials登入的时候,会发生密码错误引发的认证失败 MongoCollection users; if (IsAdmin) { users = mongoSvr.GetDatabase(DATABASE_NAME_ADMIN).GetCollection(MongoDBHelper.COLLECTION_NAME_USER); } else { users = SystemManager.GetCurrentDataBase().GetCollection(MongoDBHelper.COLLECTION_NAME_USER); } //以下代码 1.Ver2.4以前的有ReadOnly,FindUser需要寻找ReadOnly字段 // 2.这个其实不用检查,有的话修改,没有的话,新建 //if (users.Database.FindUser(newUserEx.Username) == null) //{ AddUserEx(users, newUserEx); //} }
/// <summary> /// 上传文件 /// </summary> /// <remarks>Mongo允许同名文件,因为id才是主键</remarks> /// <param name="strFileName"></param> public static UploadResult UpLoadFile(String strFileName, UpLoadFileOption Option) { MongoDatabase mongoDB = SystemManager.GetCurrentDataBase(); MongoGridFS gfs = mongoDB.GetGridFS(new MongoGridFSSettings()); String RemoteName = String.Empty; if (Option.FileNameOpt == enumGFSFileName.filename) { RemoteName = new FileInfo(strFileName).Name; } else { if (Option.DirectorySeparatorChar != Path.DirectorySeparatorChar) { RemoteName = strFileName.Replace(Path.DirectorySeparatorChar, Option.DirectorySeparatorChar); } else { RemoteName = strFileName; } } try { OnActionDone(new ActionDoneEventArgs(RemoteName + " Uploading ")); if (!gfs.Exists(RemoteName)) { gfs.Upload(strFileName, RemoteName); return(UploadResult.Complete); } else { switch (Option.AlreadyOpt) { case enumGFSAlready.JustAddIt: gfs.Upload(strFileName, RemoteName); return(UploadResult.Complete); case enumGFSAlready.RenameIt: String ExtendName = new FileInfo(strFileName).Extension; String MainName = RemoteName.Substring(0, RemoteName.Length - ExtendName.Length); int i = 1; while (gfs.Exists(MainName + i.ToString() + ExtendName)) { i++; } gfs.Upload(strFileName, MainName + i.ToString() + ExtendName); return(UploadResult.Complete); case enumGFSAlready.SkipIt: return(UploadResult.Skip); case enumGFSAlready.OverwriteIt: gfs.Delete(RemoteName); gfs.Upload(strFileName, RemoteName); return(UploadResult.Complete); case enumGFSAlready.Stop: return(UploadResult.Skip); } return(UploadResult.Skip); } } catch (Exception ex) { SystemManager.ExceptionDeal(ex); return(UploadResult.Exception); } }
/// <summary> /// 数据库操作 /// </summary> /// <param name="strObjTag"></param> /// <param name="dbName"></param> /// <param name="func"></param> /// <param name="tr"></param> /// <returns></returns> public static String DataBaseOpration(String strObjTag, String dbName, Oprcode func, TreeNode tr) { String rtnResult = String.Empty; MongoServer mongoSvr = GetMongoServerBySvrPath(strObjTag); String strSvrPath = SystemManager.GetTagData(strObjTag); String svrKey = strSvrPath.Split("/".ToCharArray())[(int)PathLv.InstanceLv]; var result = new CommandResult(new BsonDocument()); if (mongoSvr != null) { switch (func) { case Oprcode.Create: if (!mongoSvr.DatabaseExists(dbName)) { //从权限上看,clusterAdmin是必须的 //但是能够建立数据库,不表示能够看到里面的内容! //dbAdmin可以访问数据库。 //clusterAdmin能创建数据库但是不能访问数据库。 try { mongoSvr.GetDatabase(dbName); tr.Nodes.Add(UIHelper.FillDataBaseInfoToTreeNode(dbName, mongoSvr, svrKey + "/" + svrKey)); } catch (Exception ex) { //如果使用没有dbAdmin权限的clusterAdmin。。。。 SystemManager.ExceptionDeal(ex); } } break; case Oprcode.Drop: if (mongoSvr.DatabaseExists(dbName)) { result = mongoSvr.DropDatabase(dbName); if (tr != null) { tr.TreeView.Nodes.Remove(tr); } if (!result.Response.Contains("err")) { return(String.Empty); } return(result.Response["err"].ToString()); } break; case Oprcode.Repair: //其实Repair的入口不在这个方法里面 CommandHelper.ExecuteMongoDBCommand(CommandHelper.repairDatabase_Command, SystemManager.GetCurrentDataBase()); break; default: break; } } return(rtnResult); }
//http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart /// <summary> /// Convert Query Sql To DataFilter /// </summary> /// <param name="Sql"></param> /// <returns></returns> public static DataFilter ConvertQuerySql(String Sql) { DataFilter rtnQuery = new DataFilter(); Sql = Sql.Trim(); //引号中的空格用 代替,引号以外的东西小写 Sql = Regular(Sql); //先将字符串里面的空格统一成单个空格 //Select A,B From C -> //Select A,B From C while (Sql.Contains(" ")) { Sql = Sql.Replace(" ", " "); } //找出Select ,From , Group String[] SqlToken = Sql.Split(" ".ToCharArray()); int SelectStartIndex = -1; int FromStartIndex = -1; int WhereStartIndex = -1; int GroupByStartIndex = -1; int OrderByStartIndex = -1; for (int i = 0; i < SqlToken.Length; i++) { switch (SqlToken[i].ToLower()) { case "select": SelectStartIndex = i; break; case "from": FromStartIndex = i; break; case "where": WhereStartIndex = i; break; case "group": GroupByStartIndex = i; break; case "order": OrderByStartIndex = i; break; default: break; } } String[] KeyWords = new String[] { "select", "from", "where", "group", "order" }; //From 设定 必须项 //From - > CollectionName String strFrom = GetKeyContent(FromStartIndex, SqlToken, KeyWords); MongoCollection mongoCol; if ((strFrom != String.Empty) & SystemManager.GetCurrentDataBase().CollectionExists(strFrom)) { mongoCol = SystemManager.GetCurrentDataBase().GetCollection(strFrom); } else { return(null); } //Select 设定 必须项 //Select - > FieldList String strSelect = GetKeyContent(SelectStartIndex, SqlToken, KeyWords); if (strSelect == String.Empty) { return(null); } List <String> ColumnNameLst = MongoDBHelper.GetCollectionSchame(mongoCol); if (strSelect == "*") { //Select * foreach (String item in ColumnNameLst) { DataFilter.QueryFieldItem field = new DataFilter.QueryFieldItem(); field.ColName = item; field.IsShow = true; field.sortType = DataFilter.SortType.NoSort; rtnQuery.QueryFieldList.Add(field); } } else { //Select A,B,C foreach (String item in strSelect.Split(",".ToCharArray())) { DataFilter.QueryFieldItem field = new DataFilter.QueryFieldItem(); field.ColName = item; field.IsShow = true; field.sortType = DataFilter.SortType.NoSort; rtnQuery.QueryFieldList.Add(field); } } //Where 设定,可选项 String strWhere = GetKeyContent(WhereStartIndex, SqlToken, KeyWords); if (strWhere != String.Empty) { rtnQuery.QueryConditionList = SetQueryCondition(strWhere, ColumnNameLst); } //Order 设定,可选项 String strOrder = GetKeyContent(OrderByStartIndex, SqlToken, KeyWords); if (strOrder != String.Empty) { SetQueryOrder(rtnQuery, strOrder); } //Group 设定,可选项 String strGroup = GetKeyContent(GroupByStartIndex, SqlToken, KeyWords); if (strGroup != String.Empty) { //TODO:Group } return(rtnQuery); }