/// <summary> /// 格式化数据为数据库通用格式 /// </summary> /// <param name="val"></param> /// <returns></returns> internal static string FormatValue(object val) { if (val == null || val == DBNull.Value) { return("null"); } Type type = val.GetType(); if (type == typeof(Guid)) { return(string.Format("'{0}'", val)); } else if (type == typeof(DateTime)) { return(string.Format("'{0}'", ((DateTime)val).ToString("yyyy-MM-dd HH:mm:ss"))); } else if (type == typeof(bool)) { return(((bool)val) ? "1" : "0"); } else if (val is Field) { return(((Field)val).Name); } else if (val is DbValue) { return(((DbValue)val).Value); } else if (type.IsEnum) { return(Convert.ToInt32(val).ToString()); } else if (type.IsValueType) { if (CoreHelper.CheckStructType(type)) { //如果属性是值类型,则进行系列化存储 return(SerializationManager.SerializeJson(val)); } return(val.ToString()); } else { return(string.Format("N'{0}'", val.ToString())); } }
internal DbCommand CreateUpdate <T>(Table table, List <FieldValue> fvlist, WhereClip where) where T : Entity { T entity = CoreHelper.CreateInstance <T>(); if (entity.GetReadOnly()) { throw new DataException("只读实体" + typeof(T).Name + "只能用于查询!"); } if ((object)where == null) { throw new DataException("更新条件不能为null!"); } //移除缓存 //if (this.Cache != null) Cache.RemoveCache<T>(); string tableName = table == null?entity.GetTable().Name : table.Name; List <SQLParameter> plist = new List <SQLParameter>(); StringBuilder sb = new StringBuilder(); sb.Append("UPDATE " + tableName + " SET "); fvlist.ForEach(fv => { if (fv.IsPrimaryKey || fv.IsIdentity) { return; } if (fv.IsChanged) { if (CheckValue(fv.Value)) { sb.Append(fv.Field.At((string)null).Name + " = " + DataHelper.FormatValue(fv.Value)); } else { SQLParameter p = null; if (CoreHelper.CheckStructType(fv.Value)) { p = CreateOrmParameter(DataHelper.FormatValue(fv.Value)); } else { p = CreateOrmParameter(fv.Value); } sb.Append(fv.Field.At((string)null).Name + " = " + p.Name); plist.Add(p); } sb.Append(","); } }); sb.Remove(sb.Length - 1, 1); if (!DataHelper.IsNullOrEmpty(where)) { sb.Append(" WHERE " + where.ToString()); plist.AddRange(where.Parameters); } return(CreateSqlCommand(sb.ToString(), plist.ToArray())); }
internal DbCommand CreateInsert <T>(Table table, List <FieldValue> fvlist, Field identityfield, string autoIncrementName) where T : Entity { T entity = CoreHelper.CreateInstance <T>(); if (entity.GetReadOnly()) { throw new DataException("只读实体" + typeof(T).Name + "只能用于查询!"); } //移除缓存 //if (this.Cache != null) Cache.RemoveCache<T>(); string tableName = table == null?entity.GetTable().Name : table.Name; List <SQLParameter> plist = new List <SQLParameter>(); StringBuilder sbsql = new StringBuilder(); StringBuilder sbparam = new StringBuilder(); if (AllowAutoIncrement) { //如果标识列和标识名称都不为null if ((IField)identityfield != null && !string.IsNullOrEmpty(autoIncrementName)) { string identityName = GetAutoIncrement(autoIncrementName); bool exist = false; fvlist.ForEach(fv => { if (fv.IsIdentity) { fv.Value = new DbValue(identityName); fv.IsIdentity = false; exist = true; } }); if (!exist) { object value = new DbValue(identityName); FieldValue fv = new FieldValue(identityfield, value); fvlist.Insert(0, fv); } } } sbsql.Append("INSERT INTO " + tableName + "("); sbparam.Append(" VALUES ("); fvlist.ForEach(fv => { if (fv.IsIdentity) { return; } sbsql.Append(fv.Field.At((string)null).Name); if (CheckValue(fv.Value)) { sbparam.Append(DataHelper.FormatValue(fv.Value)); } else { SQLParameter p = null; if (CoreHelper.CheckStructType(fv.Value)) { p = CreateOrmParameter(DataHelper.FormatValue(fv.Value)); } else { p = CreateOrmParameter(fv.Value); } sbparam.Append(p.Name); plist.Add(p); } sbsql.Append(","); sbparam.Append(","); }); sbsql.Remove(sbsql.Length - 1, 1).Append(")"); sbparam.Remove(sbparam.Length - 1, 1).Append(")"); string cmdText = string.Format("{0}{1}", sbsql, sbparam); return(CreateSqlCommand(cmdText, plist.ToArray())); }