Example #1
0
        /// <summary>
        /// 检查对应的字段是否存在,不存在则创建
        /// </summary>
        /// <param name="db"></param>
        internal static string CheckColumnExists(Type type, AbsDBExtend db)
        {
            string result    = "";
            var    dbAdapter = db._DBAdapter;
            List <Attribute.FieldInnerAttribute> columns = GetColumns(type, db);
            string tableName = TypeCache.GetTableName(type, db.dbContext);

            foreach (Attribute.FieldInnerAttribute item in columns)
            {
                var sb = new StringBuilder();
                //string sql = dbAdapter.GetSelectTop(item.MapingName, "from " + dbAdapter.KeyWordFormat(tableName), "", 1);
                dbAdapter.GetSelectTop(sb, item.MapingName, b =>
                {
                    b.Append(" from " + dbAdapter.KeyWordFormat(tableName));
                }, "", 1);
                var sql = sb.ToString();
                try
                {
                    db.Execute(sql);
                }
                catch (Exception ero)//出错,按没有字段算
                {
                    result += CreateColumn(db, item);
                }
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// 指定格式化更新[基本方法]
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parame"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        protected int ExecuteWithFormat(string sql, ParameCollection parame, params Type[] types)
        {
            AbsDBExtend db = DBExtend;

            foreach (var p in parame)
            {
                db.AddParam(p.Key, p.Value);
            }
            return(db.Execute(sql, types));
        }
Example #3
0
        /// <summary>
        /// 创建列
        /// </summary>
        /// <param name="db"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        internal static string CreateColumn(AbsDBExtend db, Attribute.FieldInnerAttribute item)
        {
            var    dbAdapter = db._DBAdapter;
            string result    = "";

            if (string.IsNullOrEmpty(item.ColumnType))
            {
                throw new Exception("ColumnType is null");
            }
            string str         = dbAdapter.GetCreateColumnScript(item);
            string indexScript = "";

            if (item.FieldIndexType != Attribute.FieldIndexType.无)
            {
                indexScript = dbAdapter.GetColumnIndexScript(item);
            }
            try
            {
                db.Execute(str);
                if (!string.IsNullOrEmpty(indexScript))
                {
                    db.Execute(indexScript);
                }
                result = string.Format("创建字段:{0} {1} {2}\r\n", item.TableName, item.MemberName, item.PropertyType);
                var model = System.Activator.CreateInstance(item.ModelType) as IModel;
                try
                {
                    model.OnColumnCreated(item.MemberName);
                }
                catch (Exception ero)
                {
                    result = string.Format("添加字段:{0} {1},升级数据时发生错误:{2}\r\n", item.TableName, item.MemberName, ero.Message);
                }
                EventLog.Log(result, "", false);
            }
            catch (Exception ero)
            {
                //EventLog.Log("创建字段时发生错误:" + ero.Message);
                result = string.Format("创建字段:{0} {1}发生错误:{2}\r\n", item.TableName, item.MemberName, ero.Message);
            }
            return(result);
        }
Example #4
0
        /// <summary>
        /// 创建表
        /// 会检查表是否存在,如果存在则检查字段
        /// 创建失败则抛出异常
        /// 表存在返回失败
        /// </summary>
        /// <param name="type"></param>
        /// <param name="db"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static bool CreateTable(Type type, AbsDBExtend db, out string message)
        {
            var dbAdapter = db._DBAdapter;

            message = "";
            //TypeCache.SetDBAdapterCache(GetType(),dbAdapter);
            string tableName = TypeCache.GetTableName(type, db.dbContext);
            var    sb        = new StringBuilder();

            dbAdapter.GetSelectTop(sb, "0", b =>
            {
                b.Append(" from " + dbAdapter.KeyWordFormat(tableName));
            }, "", 1);
            var  sql        = sb.ToString();
            bool needCreate = false;

            try
            {
                //检查表是否存在
                db.Execute(sql);
                //return false;// 返回结果时不会检查字段
            }
            catch
            {
                needCreate = true;
            }
            if (needCreate)
            {
                List <string> list = new List <string>();
                try
                {
                    List <Attribute.FieldInnerAttribute> columns = GetColumns(type, db);
                    dbAdapter.CreateTable(db.dbContext, columns, tableName);
                    message = string.Format("创建表:{0}\r\n", tableName);
                    CheckIndexExists(type, db);
                    //return true;
                }
                catch (Exception ero)
                {
                    message = "创建表时发生错误 类型{0} {1}\r\n";
                    message = string.Format(message, type, ero.Message);
                    throw new Exception(message);
                    //return false;
                }
                //EventLog.Log(message, "", false);
            }
            else
            {
                message = CheckColumnExists(type, db);
            }
            return(true);
        }
Example #5
0
        /// <summary>
        /// 检查索引
        /// </summary>
        /// <param name="type"></param>
        /// <param name="db"></param>
        /// <param name="removeId"></param>
        public static void CheckIndexExists(Type type, AbsDBExtend db, bool removeId = false)
        {
            var list = GetIndexScript(type, db, removeId);

            foreach (var item in list)
            {
                try
                {
                    db.Execute(item);
                }
                catch (Exception ero)//出错,
                {
                    EventLog.Log(string.Format("创建索引失败:{0}\r\n{1}", ero.Message, item));
                }
            }
        }
Example #6
0
        /// <summary>
        /// 检查索引
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        internal static void CheckIndexExists(Type type, AbsDBExtend db)
        {
            var list = GetIndexScript(type, db);

            foreach (var item in list)
            {
                try
                {
                    db.Execute(item);
                }
                catch (Exception ero)//出错,
                {
                    CoreHelper.EventLog.Log(string.Format("创建索引失败:{0}\r\n{1}", ero.Message, item));
                }
            }
        }
Example #7
0
        /// <summary>
        /// 创建表
        /// 会检查表是否存在,如果存在则检查字段
        /// 创建失败则抛出异常
        /// 表存在返回失败
        /// </summary>
        /// <param name="db"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        internal static bool CreateTable(Type type, AbsDBExtend db, out string message)
        {
            var dbAdapter = db._DBAdapter;

            message = "";
            //TypeCache.SetDBAdapterCache(GetType(),dbAdapter);
            string tableName  = TypeCache.GetTableName(type, db.dbContext);
            string sql        = dbAdapter.GetSelectTop("0", "from " + dbAdapter.KeyWordFormat(tableName), "", 1);
            bool   needCreate = false;

            try
            {
                //检查表是否存在
                db.Execute(sql);
                return(false);
            }
            catch
            {
                needCreate = true;
            }
            if (needCreate)
            {
                List <string> list = new List <string>();
                try
                {
                    List <Attribute.FieldAttribute> columns = GetColumns(type, dbAdapter);
                    dbAdapter.CreateTable(columns, tableName);
                    message = string.Format("创建表:{0}\r\n", tableName);
                    CheckIndexExists(type, db);
                    //return true;
                }
                catch (Exception ero)
                {
                    message = "创建表时发生错误 类型{0} {1}\r\n";
                    message = string.Format(message, type, ero.Message);
                    throw new CRLException(message);
                    //return false;
                }
                //CoreHelper.EventLog.Log(message, "", false);
            }
            else
            {
                message = CheckColumnExists(type, db);
            }
            return(true);
        }
Example #8
0
        /// <summary>
        /// 检查对应的字段是否存在,不存在则创建
        /// </summary>
        /// <param name="db"></param>
        internal static string CheckColumnExists(Type type, AbsDBExtend db)
        {
            string result    = "";
            var    dbAdapter = db._DBAdapter;
            List <Attribute.FieldAttribute> columns = GetColumns(type, dbAdapter);
            string tableName = TypeCache.GetTableName(type, db.dbContext);

            foreach (Attribute.FieldAttribute item in columns)
            {
                string sql = dbAdapter.GetSelectTop(item.MapingName, "from " + dbAdapter.KeyWordFormat(tableName), "", 1);
                try
                {
                    db.Execute(sql);
                }
                catch//出错,按没有字段算
                {
                    result += CreateColumn(db, item);
                }
            }
            return(result);
        }