예제 #1
0
        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("&", "&#38;").Replace("<", "&#60;").Replace(">", "&#62;"));
                        }
                        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("&", "&#38;").Replace("<", "&#60;").Replace(">", "&#62;"));
                        }
                        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);
        }
예제 #2
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("&", "&#38;").Replace("<", "&#60;").Replace(">", "&#62;"));
                            }
                            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("&", "&#38;").Replace("<", "&#60;").Replace(">", "&#62;"));
                        }
                        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);
        }