public object CreateRecord(Hashtable myhash) { DataTable table = new AttributeHelper <Entity>().getEntityTable(); List <DbParameter> p = new List <DbParameter>(); StringBuilder strSql = new StringBuilder(); StringBuilder fieldBuilder = new StringBuilder(); StringBuilder valueBuilder = new StringBuilder(); Dictionary <Type, DbType> TypeToDb = getDbType();//new Dictionary<Type,DbType>(); if (table.Rows.Count > 1) { Hashtable ht = new Hashtable(System.StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); foreach (DataRow dr in table.Rows) { String Name = dr["Name"].ToString(); String ClassName = dr["ClassName"].ToString(); Type Type = (Type)dr["Type"]; Int32 Length = Convert.ToInt32(dr["Length"]); EnumFieldUsage Usage = (EnumFieldUsage)Convert.ToInt32(dr["Usage"]); object DefaultValue = dr["DefaultValue"]; bool Null = Convert.ToBoolean(dr["Null"]); DbType dbtype = TypeToDb[Type]; bool NameExists = myhash.Contains(Name.ToLower()); bool ClassNameExists = myhash.Contains(ClassName.ToLower()); String PvName = NameExists?Name:ClassName;//如果传值不是表的字段名,则取类的字段名(用户获取传过来的值) if (Usage == EnumFieldUsage.BySystem || Usage == EnumFieldUsage.IncKey || Usage == EnumFieldUsage.IncPK) { continue; } #region 允许为空值判断 if (!Null) { if (!NameExists && !ClassNameExists) { return(-2); } } #endregion #region 主键或者唯一键判断 object KeyValue = ((NameExists || ClassNameExists)?myhash[PvName.ToLower()]:(DefaultValue == null?"":DefaultValue)); if (!Null)//不允许为空值判断 { if (string.IsNullOrEmpty(KeyValue.ToString())) { return(-2); } } if (Usage == EnumFieldUsage.PrimaryKey || Usage == EnumFieldUsage.UniqueKey)//主键或者唯一键 { if (!string.IsNullOrEmpty(KeyValue.ToString())) { DbParameter[] p1 = new DbParameter[] { SqlHelper.MakeInParam(Prefix + Name, TypeToDb[Type], Length, KeyValue) }; string sql = "select isnull(count(1),0) from [" + TablePrefix + tableName + "] where [" + Name + "]=" + Prefix + Name; if (Convert.ToInt32(SqlHelper.ExecuteScalar(CommandType.Text, sql, p1)) > 0) { return(-1); } } } #endregion if (!string.IsNullOrEmpty(DefaultValue.ToString())) { if (Type == typeof(System.DateTime) && DefaultValue.ToString().ToLower() == "now") { DefaultValue = DateTime.Now; } DbParameter d = SqlHelper.MakeInParam(Prefix + Name, dbtype, Length, DefaultValue); if (Type == typeof(System.String) && Length <= 200 && Length != 0) { d = SqlHelper.MakeInParam(Prefix + Name, TypeToDb[Type], Length, DefaultValue.ToString().Replace("&", "&").Replace("<", "<").Replace(">", ">")); } p.Add(d); if (!ht.Contains(Name)) { ht.Add(Name, d); } } object colValue = null; if (NameExists || ClassNameExists) { colValue = myhash[PvName.ToLower()]; if (!Null)//不允许为空值判断 { if (string.IsNullOrEmpty(colValue.ToString())) { return(-2); } } if (ht.Contains(Name)) { p.Remove((DbParameter)ht[Name]); ht.Remove(Name); } DbParameter d = SqlHelper.MakeInParam(Prefix + Name, dbtype, Length, colValue); if (Type == typeof(System.String) && Length <= 200 && Length != 0) { d = SqlHelper.MakeInParam(Prefix + Name, TypeToDb[Type], Length, colValue.ToString().Replace("&", "&").Replace("<", "<").Replace(">", ">")); } p.Add(d); } if (NameExists || ClassNameExists || !string.IsNullOrEmpty(DefaultValue.ToString())) { fieldBuilder.Append("[" + Name + "],"); valueBuilder.Append(Prefix + Name + ","); } } strSql.Append("insert into [" + TablePrefix + tableName + "]("); strSql.Append(fieldBuilder.Remove(fieldBuilder.Length - 1, 1).ToString()); strSql.Append(") values("); strSql.Append(valueBuilder.Remove(valueBuilder.Length - 1, 1).ToString()); strSql.Append(")"); return(SqlHelper.ExecuteScalar(CommandType.Text, strSql.ToString(), p.ToArray())); } return(0); }
public object UpdateRecord(Hashtable myhash) { DataTable table = new AttributeHelper <Entity>().getEntityTable(); List <DbParameter> p = new List <DbParameter>(); StringBuilder strSql = new StringBuilder(); StringBuilder fieldBuilder = new StringBuilder(); Dictionary <Type, DbType> TypeToDb = getDbType();//new Dictionary<Type,DbType>(); if (table.Rows.Count > 1) { string PkName = ""; Type PkType = typeof(System.Int32); Int32 PkLength = 0; object PkValue = null; foreach (DataRow dr in table.Rows) { String Name = dr["Name"].ToString(); String ClassName = dr["ClassName"].ToString(); Type Type = (Type)dr["Type"]; Int32 Length = Convert.ToInt32(dr["Length"]); EnumFieldUsage Usage = (EnumFieldUsage)Convert.ToInt32(dr["Usage"]); if (Usage == EnumFieldUsage.IncKey || Usage == EnumFieldUsage.IncPK || Usage == EnumFieldUsage.PrimaryKey) { bool NameExists = myhash.Contains(Name.ToLower()); bool ClassNameExists = myhash.Contains(ClassName.ToLower()); if (NameExists || ClassNameExists) { PkName = NameExists?Name:ClassName; PkValue = Convert.ChangeType(myhash[PkName.ToLower()], Type); PkName = Name; PkType = Type; PkLength = Length; DbParameter d = SqlHelper.MakeInParam(Prefix + PkName, TypeToDb[PkType], PkLength, PkValue); if (Type == typeof(System.String) && Length <= 200 && Length != 0) { d = SqlHelper.MakeInParam(Prefix + PkName, TypeToDb[PkType], PkLength, PkValue.ToString().Replace("&", "&").Replace("<", "<").Replace(">", ">")); } p.Add(d); break; } } } foreach (DataRow dr in table.Rows) { String Name = dr["Name"].ToString(); String ClassName = dr["ClassName"].ToString(); Type Type = (Type)dr["Type"]; Int32 Length = Convert.ToInt32(dr["Length"]); EnumFieldUsage Usage = (EnumFieldUsage)Convert.ToInt32(dr["Usage"]); bool Null = Convert.ToBoolean(dr["Null"]); if (Usage == EnumFieldUsage.BySystem || Usage == EnumFieldUsage.IncKey || Usage == EnumFieldUsage.IncPK) { continue; } object colValue = null; bool NameExists = myhash.Contains(Name.ToLower()); bool ClassNameExists = myhash.Contains(ClassName.ToLower()); #region 允许为空值判断 if (!Null) { if (!NameExists && !ClassNameExists) { return(-2); } } #endregion if (NameExists || ClassNameExists) { String ValueName = NameExists?Name:ClassName; if (PkName.ToLower() == Name.ToLower()) { continue; } colValue = Convert.ChangeType(myhash[ValueName.ToLower()], Type); //myhash[Name.ToLower()]; if (!Null) //不允许为空值判断 { if (string.IsNullOrEmpty(colValue.ToString())) { return(-2); } } if (Usage == EnumFieldUsage.PrimaryKey || Usage == EnumFieldUsage.UniqueKey)//主键或者唯一键 { if (!string.IsNullOrEmpty(colValue.ToString())) { DbParameter[] p1 = new DbParameter[] { SqlHelper.MakeInParam(Prefix + Name, TypeToDb[Type], Length, colValue), SqlHelper.MakeInParam(Prefix + PkName, TypeToDb[PkType], PkLength, PkValue) }; string sql = "select isnull(count(1),0) from [" + TablePrefix + tableName + "] where [" + Name + "]=" + Prefix + Name + " and [" + PkName + "]<>" + Prefix + PkName; if (Convert.ToInt32(SqlHelper.ExecuteScalar(CommandType.Text, sql, p1)) > 0) { return(-1); } } } DbParameter d = SqlHelper.MakeInParam(Prefix + Name, TypeToDb[Type], Length, colValue); if (Type == typeof(System.String) && Length <= 200 && Length != 0) { d = SqlHelper.MakeInParam(Prefix + Name, TypeToDb[Type], Length, colValue.ToString().Replace("&", "&").Replace("<", "<").Replace(">", ">")); } p.Add(d); fieldBuilder.Append("[" + Name + "] = " + Prefix + "" + Name + ","); } } strSql.Append("update [" + TablePrefix + tableName + "] set "); strSql.Append(fieldBuilder.Remove(fieldBuilder.Length - 1, 1).ToString()); strSql.Append(" where [" + PkName + "]=" + Prefix + PkName); SqlHelper.ExecuteNonQuery(strSql.ToString(), p.ToArray()); return(PkValue); } return(0); }