Exemplo n.º 1
0
        /// <summary>
        /// Устанавливает обработчик функций движка
        /// </summary>
        /// <param name="dbext">Тип</param>
        /// <param name="param">Строка подключения</param>
        /// <returns></returns>
        public IRabNetDataLayer InitEngine(String dbType, String param)
        {
            if (_data != null)
            {
                if (_data2 == _data)
                {
                    _data2 = null;
                }
                _data.Close();
                if (_data2 != null)
                {
                    _data2.Close();
                }
                _data = _data2 = null;
            }
            _logger.Debug("initing engine data to " + dbType + " param=" + param);
            if (dbType == "db.mysql")
            {
                _data  = getDataLayer("db.mysql");
                _data2 = _data.Clone();
                _data.Init(param);
                _data2.Init(param);
            }
            else
            {
                throw new DBDriverNotFoudException(dbType);
            }

            int ver = options().getIntOption("db", "version", Options.OPT_LEVEL.FARM);

            if (ver != NEED_DB_VERSION)
            {
                if (_data2 == _data)
                {
                    _data2 = null;
                }
                if (_data != null)
                {
                    _data.Close();
                }
                if (_data2 != null)
                {
                    _data2.Close();
                }
                _data = _data2 = null;
                throw new DBBadVersionException(NEED_DB_VERSION, ver);
            }
            return(_data);
        }
Exemplo n.º 2
0
        private IRabNetDataLayer getDataLayer(string asmName)
        {
            string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, asmName + ".dll");

            if (!File.Exists(filePath))
            {
                throw new Exception("MySQL DataLayer dll is not exists");
            }
            ///todo проверка на уже загруженность сборки
            Assembly Asm = Assembly.LoadFile(filePath);//загружаем Сборку

            //Type AsmType = Asm.GetType();
            foreach (Type AsmType in Asm.GetTypes())  //Проверяем все имеющиеся типы данных (классы)
            {
                if (typeof(IRabNetDataLayer).IsAssignableFrom(AsmType))
                {
                    IRabNetDataLayer db = (IRabNetDataLayer)Activator.CreateInstance(AsmType);
                    return(db);
                }
            }
            throw new Exception("could not load DataLayer from assembly");
        }