Example #1
0
		internal string Insert(Table table,out List<IDbDataParameter> insertParameters)
		{
            sTable tbl = _pool.Mapping[table.GetType()];
			insertParameters=new List<IDbDataParameter>();
			List<string> fprops = new List<string>(tbl.ForeignTableProperties);
			try{
				string values="";
				string parameters="";
                foreach (string prop in tbl.Properties)
                {
                    sTableField[] flds = tbl[prop];
                    if (flds.Length > 0)
                    {
                        PropertyInfo pi = table.GetType().GetProperty(prop, Utility._BINDING_FLAGS);
                        if (pi == null)
                            pi = table.GetType().GetProperty(prop, Utility._BINDING_FLAGS_WITH_INHERITANCE);
                        if ((fprops.Contains(prop)||pool.Mapping.IsMappableType(pi.PropertyType)) && !Utility.IsEnum(pi.PropertyType))
                        {
                            Table eTable = (Table)table.GetField(prop);
                            if (eTable == null)
                            {
                                foreach (sTableField fld in flds)
                                {
                                    values += fld.Name + ",";
                                    parameters += "," + CreateParameterName(fld.Name);
                                    insertParameters.Add(pool.CreateParameter(CreateParameterName(fld.Name), null, fld.Type, fld.Length));
                                }
                            }
                            else
                            {
                                foreach (sTableField fld in flds)
                                {
                                    values += fld.Name + ",";
                                    parameters += "," + CreateParameterName(fld.Name);
                                }
                                Type etype = pi.PropertyType;
                                while (true)
                                {
                                    sTable etbl = _pool.Mapping[etype];
                                    foreach (sTableField fld in flds)
                                    {
                                        foreach (sTableField efld in etbl.Fields)
                                        {
                                            if (fld.ExternalField == efld.Name)
                                            {
                                                insertParameters.Add(pool.CreateParameter(CreateParameterName(fld.Name),QueryBuilder.LocateFieldValue(eTable,efld,pool)));
                                                break;
                                            }
                                        }
                                    }
                                    etype = etype.BaseType;
                                    if (etype.Equals(typeof(Table)))
                                        break;
                                }
                            }
                        }
                        else if (!Utility.StringsEqual(prop,tbl.AutoGenProperty) && flds[0].ComputedCode==null)
                        {
                            values += flds[0].Name + ",";
                            parameters += "," + CreateParameterName(flds[0].Name);
                            if (table.IsFieldNull(prop))
                                insertParameters.Add(pool.CreateParameter(CreateParameterName(flds[0].Name), null, flds[0].Type, flds[0].Length));
                            else
                            {
                                if (flds[0].Type == FieldType.ENUM)
                                    insertParameters.Add(pool.CreateParameter(CreateParameterName(flds[0].Name), pool.GetEnumID(table.GetType().GetProperty(prop, Utility._BINDING_FLAGS_WITH_INHERITANCE).PropertyType, table.GetField(prop).ToString())));
                                else
                                    insertParameters.Add(pool.CreateParameter(CreateParameterName(flds[0].Name), table.GetField(prop), flds[0].Type, flds[0].Length));
                            }
                        }
                    }
                }
				values=values.Substring(0,values.Length-1);
				parameters=parameters.Substring(1);
                if (tbl.AutoGenProperty != null)
                {
                    string select = "";
                    for (int x = 0; x < insertParameters.Count; x++)
                    {
                        for (int y = x + 1; y < insertParameters.Count; y++)
                        {
                            if (insertParameters[x].ParameterName == insertParameters[y].ParameterName)
                            {
                                insertParameters.RemoveAt(y);
                                y--;
                            }
                        }
                    }
                    insertParameters.Add(pool.CreateParameter(CreateParameterName(tbl.AutoGenField), table.GetField(tbl.AutoGenProperty),
                        tbl[tbl.AutoGenProperty][0].Type, tbl[tbl.AutoGenProperty][0].Length));
                    if (tbl[tbl.AutoGenProperty][0].Type == FieldType.STRING)
                        insertParameters[insertParameters.Count - 1].Size = int.MaxValue;
                    select = _GenerateAutogenIDQuery(tbl, ref insertParameters);
                    if (pool is MsSqlConnectionPool && select.StartsWith("OUTPUT"))
                        return string.Format(InsertString, tbl.Name, values, parameters).Replace(" VALUES ", " " + select + " VALUES ");
                    else
                        return string.Format(InsertString, tbl.Name, values, parameters) + " " + select;
                }
				return string.Format(InsertString,tbl.Name,values,parameters);
			}catch (Exception e)
			{
				Logger.LogLine(e.Message);
				return null;
			}
		}
Example #2
0
 internal string InsertWithIdentity(Table table, out List<IDbDataParameter> insertParameters)
 {
     sTable tbl = _pool.Mapping[table.GetType()];
     insertParameters = new List<IDbDataParameter>();
     try
     {
         string values = "";
         string parameters = "";
         foreach (string prop in tbl.Properties)
         {
             sTableField[] flds = tbl[prop];
             if (flds.Length > 0)
             {
                 PropertyInfo pi = table.GetType().GetProperty(prop, Utility._BINDING_FLAGS);
                 if (pi.GetCustomAttributes(false)[0] is Org.Reddragonit.Dbpro.Structure.Attributes.IForeignField)
                 {
                     Table eTable = (Table)table.GetField(prop);
                     if (eTable == null)
                     {
                         foreach (sTableField fld in flds)
                         {
                             values += fld.Name + ",";
                             parameters += "," + CreateParameterName(fld.Name);
                             insertParameters.Add(pool.CreateParameter(CreateParameterName(fld.Name), null, fld.Type, fld.Length));
                         }
                     }
                     else
                     {
                         foreach (sTableField fld in flds)
                         {
                             values += fld.Name + ",";
                             parameters += "," + CreateParameterName(fld.Name);
                         }
                         Type etype = pi.PropertyType;
                         while (true)
                         {
                             sTable etbl = _pool.Mapping[etype];
                             foreach (sTableField fld in flds){
                                 foreach (sTableField efld in etbl.Fields)
                                 {
                                     if (fld.ExternalField == efld.Name)
                                     {
                                         object val = LocateFieldValue(eTable, fld, pool);
                                         if (val==null)
                                             insertParameters.Add(pool.CreateParameter(CreateParameterName(fld.Name), null, fld.Type, fld.Length));
                                         else
                                             insertParameters.Add(pool.CreateParameter(CreateParameterName(fld.Name), val));
                                         break;
                                     }
                                 }
                             }
                             etype = etype.BaseType;
                             if (etype.Equals(typeof(Table)))
                                 break;
                         }
                     }
                 }else
                 {
                     values += flds[0].Name + ",";
                     parameters += "," + CreateParameterName(prop);
                     if (table.IsFieldNull(prop))
                         insertParameters.Add(pool.CreateParameter(CreateParameterName(prop), null, flds[0].Type, flds[0].Length));
                     else
                     {
                         if (flds[0].Type == FieldType.ENUM)
                             insertParameters.Add(pool.CreateParameter(CreateParameterName(prop), pool.GetEnumID(table.GetType().GetProperty(prop, Utility._BINDING_FLAGS).PropertyType, table.GetField(prop).ToString())));
                         else
                             insertParameters.Add(pool.CreateParameter(CreateParameterName(prop), table.GetField(prop), flds[0].Type, flds[0].Length));
                     }
                 }
             }
         }
         values = values.Substring(0, values.Length - 1);
         parameters = parameters.Substring(1);
         return string.Format(InsertString, tbl.Name, values, parameters);
     }
     catch (Exception e)
     {
         Logger.LogLine(e.Message);
         return null;
     }
 }