コード例 #1
0
        protected string GetInsertSql(DbContext dbContext, Attribute.TableInnerAttribute table, object obj, bool fillParame = true)
        {
            Type type      = obj.GetType();
            var  key       = string.Format("{0}_{1}", type, fillParame);
            var  helper    = dbContext.DBHelper;
            var  tableName = table.TableName;
            //var primaryKey = table.PrimaryKey;
            var typeArry = table.Fields;
            //var reflect = ReflectionHelper.GetInfo<T>();
            string sql;
            var    cached = insertSqlCache.TryGetValue(key, out sql);

            if (!cached)
            {
                sql = string.Format("insert into {0}(", KeyWordFormat(tableName));
            }
            string sql1 = "";
            string sql2 = "";

            foreach (Attribute.FieldInnerAttribute info in typeArry)
            {
                string name = info.MapingName;
                if (info.IsPrimaryKey && !info.KeepIdentity && DBType != DBType.ORACLE)
                {
                    continue;
                }
                object value = info.GetValue(obj);

                value = ObjectConvert.CheckNullValue(value, info.PropertyType);
                if (!cached)
                {
                    sql1 += string.Format("{0},", FieldNameFormat(info));
                    if (fillParame)
                    {
                        var par = GetParamName(name, "");
                        sql2 += string.Format("{0},", par);//@{0}
                    }
                }
                if (fillParame)
                {
                    helper.AddParam(name, value);
                }
            }
            if (!cached)
            {
                sql1 = sql1.Substring(0, sql1.Length - 1) + ") values";
                sql += sql1;
                if (fillParame)
                {
                    sql2 = sql2.Substring(0, sql2.Length - 1);
                    sql += "( " + sql2 + ")";
                }
                //sql = SqlFormat(sql);
                insertSqlCache.TryAdd(key, sql);
            }
            return(sql);
        }
コード例 #2
0
        /// <summary>
        /// 检查字段
        /// </summary>
        /// <param name="dbName"></param>
        /// <param name="table"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public List <Attribute.FieldInnerAttribute> CheckFieldExists(string dbName, Attribute.TableInnerAttribute table, string tableName)
        {
            tableName = tableName.ToLower();
            var tb      = GetTable(dbName, tableName);
            var returns = new List <Attribute.FieldInnerAttribute>();

            if (tb.ColumnChecked)
            {
                return(returns);
            }
            var fields = table.Fields;

            if (tb.Fields.Count == 0)//首次不检查
            {
                SaveTable(dbName, table, tableName);
                return(returns);
            }
            //检查字段是否一致
            foreach (var item in fields)
            {
                //if (item.FieldType != Attribute.FieldType.数据库字段)
                //    continue;
                if (!tb.Fields.Contains(item.MemberName.ToLower()))
                {
                    returns.Add(item);
                }
            }
            tb.ColumnChecked = true;
            if (returns.Count > 0)
            {
                var fields2 = new List <string>();
                fields.ForEach(b =>
                {
                    fields2.Add(b.MemberName.ToLower());
                });
                tb.Fields = fields2;
                Save();
            }
            return(returns);
        }
コード例 #3
0
        /// <summary>
        /// 保存表字段
        /// </summary>
        /// <param name="dbName"></param>
        /// <param name="table"></param>
        /// <param name="tableName"></param>
        public void SaveTable(string dbName, Attribute.TableInnerAttribute table, string tableName)
        {
            tableName = tableName.ToLower();
            var fields = table.Fields;

            lock (lockObj)
            {
                var fields2 = new List <string>();
                fields.ForEach(b =>
                {
                    fields2.Add(b.MemberName.ToLower());
                });
                var tb = new Table()
                {
                    Name = tableName, Fields = fields2
                };
                var db = DataBase[dbName];
                db.Tables.Remove(tableName);
                db.Tables.Add(tableName, tb);
            }
            Save();
        }
コード例 #4
0
 public virtual string TableNameFormat(Attribute.TableInnerAttribute table)
 {
     return(table.TableName);
 }