コード例 #1
0
ファイル: DataModel.cs プロジェクト: sampath1983jan/TechData
        private StringBuilder getMultiCondition(ModelRelation sr)
        {
            StringBuilder sc = new StringBuilder();

            for (int j = 0; j < this.Relations.Count; j++)
            {
                ModelRelation tempsr = this.Relations[j];
                if (tempsr.IsRelated == false && ((tempsr.BaseSchema == sr.BaseSchema && tempsr.RelatedSchema == sr.RelatedSchema) || (tempsr.BaseSchema == sr.RelatedSchema && tempsr.RelatedSchema == sr.BaseSchema)))
                {
                    sc.AppendFormat(" and {0}.{1} equals {2}.{3} ", sr.BaseSchema, sr.BaseSchemaField, sr.RelatedSchema, sr.RelatedSchemaField);
                }
                sr.IsRelated = true;
            }
            return(sc);
        }
コード例 #2
0
ファイル: DataModel.cs プロジェクト: sampath1983jan/TechData
        private StringBuilder getChildRelation(ModelRelation sr)
        {
            StringBuilder sc = new StringBuilder();

            for (int j = 0; j < this.Relations.Count; j++)
            {
                ModelRelation tempsr = this.Relations[j];
                if (tempsr.IsRelated == false && tempsr.BaseSchema == sr.RelatedSchema)
                {
                    sc.AppendFormat("join {0} in dt_{0}.AsEnumerable() on {1}.Field<{4}>({2}) equals {0}.Field<{5}>({3})\n", tempsr.RelatedSchema,
                                    this.Relations[j].BaseSchema, "\"" + tempsr.BaseSchemaField + "\"", "\"" + tempsr.RelatedSchemaField + "\"",
                                    getColumnFieldType(this.mSchema.Tables[tempsr.BaseSchema].Columns[tempsr.BaseSchemaField]),
                                    getColumnFieldType(this.mSchema.Tables[tempsr.RelatedSchema].Columns[tempsr.RelatedSchemaField]));
                    tempsr.IsRelated = true;
                }
                //else if (tempsr.IsRelated == false && tempsr.BaseSchema == sr.BaseSchema)
                //{
                //    sc.AppendFormat("join {0} in dt_{0}.AsEnumerable() on {1}.Field<{4}>({2}) equals {0}.Field<{5}>({3})\n", tempsr.RelatedSchema,
                //         this.Relations[j].BaseSchema, tempsr.BaseSchemaField, tempsr.RelatedSchemaField, getColumnFieldType(this.mSchema.Tables[tempsr.BaseSchema].Columns[tempsr.BaseSchemaField]),
                //         getColumnFieldType(this.mSchema.Tables[tempsr.RelatedSchema].Columns[tempsr.RelatedSchemaField]));
                //    tempsr.IsRelated = true;
                //}
                //else if (tempsr.IsRelated == false && tempsr.RelatedSchema == sr.RelatedSchema)
                //{
                //    sc.AppendFormat("join {0} in dt_{0}.AsEnumerable() on {1}.Field<{4}>({2}) equals {0}.Field<{5}>({3})\n", tempsr.RelatedSchema,
                //         this.Relations[j].BaseSchema, tempsr.BaseSchemaField, tempsr.RelatedSchemaField,
                //         getColumnFieldType(this.mSchema.Tables[tempsr.BaseSchema].Columns[tempsr.BaseSchemaField]),
                //         getColumnFieldType(this.mSchema.Tables[tempsr.RelatedSchema].Columns[tempsr.RelatedSchemaField]));
                //    tempsr.IsRelated = true;
                //}
                //else if (tempsr.IsRelated == false && tempsr.RelatedSchema == sr.BaseSchema)
                //{
                //    sc.AppendFormat("join {0} in dt_{0}.AsEnumerable() on {1}.Field<{4}>({2}) equals {0}.Field<{5}>({3})\n", tempsr.RelatedSchema,
                //         this.Relations[j].BaseSchema, tempsr.BaseSchemaField, tempsr.RelatedSchemaField, getColumnFieldType(this.mSchema.Tables[tempsr.BaseSchema].Columns[tempsr.BaseSchemaField]),
                //         getColumnFieldType(this.mSchema.Tables[tempsr.RelatedSchema].Columns[tempsr.RelatedSchemaField]));
                //    tempsr.IsRelated = true;
                //}
            }

            return(sc);
        }
コード例 #3
0
ファイル: DataModel.cs プロジェクト: sampath1983jan/TechData
 private DataModel addRelation(ModelRelation relation)
 {
     Relations.Add(relation);
     return(this);
 }
コード例 #4
0
ファイル: DataModel.cs プロジェクト: sampath1983jan/TechData
        public object getResult()
        {
            //DataSet ds;
            //List<SchemaRelation> rela;
            //DynamicSchema dy = new DynamicSchema(ds,rela);
            //dy.addRelation(new SchemaRelation("", "", "", ""), new SchemaRelation("", "", "", ""));
            this.Tables = new List <string>();
            for (int i = 0; i < this.Relations.Count; i++)
            {
                ModelRelation sr = new ModelRelation();
                sr = this.Relations[i];
                if (!isTableExist(sr.BaseSchema))
                {
                    this.Tables.Add(sr.BaseSchema);
                }
                if (!isTableExist(sr.RelatedSchema))
                {
                    this.Tables.Add(sr.RelatedSchema);
                }
            }
            CSharpCodeProvider c   = new CSharpCodeProvider();
            ICodeCompiler      icc = c.CreateCompiler();
            CompilerParameters cp  = new CompilerParameters();



            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.xml.dll");
            cp.ReferencedAssemblies.Add("system.data.dll");
            cp.ReferencedAssemblies.Add("system.windows.forms.dll");
            cp.ReferencedAssemblies.Add("system.drawing.dll");
            cp.ReferencedAssemblies.Add("System.Collections.dll");
            cp.ReferencedAssemblies.Add("System.ComponentModel.dll");
            cp.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
            cp.ReferencedAssemblies.Add("System.Linq.dll");
            cp.ReferencedAssemblies.Add("mscorlib.dll");
            cp.ReferencedAssemblies.Add("System.Threading.Tasks.dll");
            cp.ReferencedAssemblies.Add("System.Reflection.dll");
            cp.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
            cp.ReferencedAssemblies.Add("System.Core.dll");
            cp.ReferencedAssemblies.Add(this.AssemblyPath() + "Mysql.Data.dll");
            // cp.ReferencedAssemblies.Add("ForziaUtilities.dll");

            cp.CompilerOptions  = "/t:library";
            cp.GenerateInMemory = true;
            StringBuilder sb = new StringBuilder("");

            sb.Append("using System;\n");
            sb.Append("using System.Xml;\n");
            sb.Append("using System.Data.SqlClient;\n");
            sb.Append("using System.Windows.Forms;\n");
            sb.Append("using System.Drawing;\n");

            sb.Append("using System.Collections.Generic;\n");
            sb.Append("using System.ComponentModel;\n");
            sb.Append("using System.Data;\n");
            sb.Append("using System.Linq;\n");
            sb.Append("using System.Text;\n");
            sb.Append("using System.Threading.Tasks;\n");
            sb.Append("using System.Reflection;\n");
            sb.Append("using System.CodeDom.Compiler;\n");
            sb.Append("using System.Diagnostics;\n");
            sb.Append("using Microsoft.CSharp;\n");
            sb.Append("using MySql.Data.MySqlClient;\n");
            sb.Append("using MySql.Data;\n");


            sb.Append("namespace CodeEvalution{ \n");
            sb.Append("public class CodeEvalutor{ \n");
            sb.Append("public object EvalCode(DataSet ds){ \n");
            // sb.Append(sbCode + " \n");
            for (int itbl = 0; itbl < this.Tables.Count; itbl++)
            {
                sb.AppendFormat("DataTable dt_{0} = new DataTable();\n", this.Tables[itbl]);
                sb.AppendFormat("dt_{0} = ds.Tables[{1}] ;\n", this.Tables[itbl], "\"" + this.Tables[itbl] + "\"");
            }

            for (int itbl = 0; itbl < this.Tables.Count; itbl++)
            {
                if (itbl == 0)
                {
                    sb.AppendFormat("var query = from {0} in dt_{0}.AsEnumerable()\n", Tables[itbl]);
                }
                else
                {
                    sb.AppendFormat(" from {0} in dt_{0}.AsEnumerable()\n", Tables[itbl]);
                }
            }

            for (int i = 0; i < this.Relations.Count; i++)
            {
                ModelRelation sr = new ModelRelation();
                sr = this.Relations[i];
                if (i == 0)
                {
                    sb.Append(" .Where (mapping => ");
                    continue;
                }
                else
                {
                    sb.AppendFormat("mapping.Field<{3}>({4})  == {0}.Field<{1}>({2})", sr.BaseSchema, getColumnFieldType(this.mSchema.Tables[sr.BaseSchema].Columns[sr.BaseSchemaField]), "\"" + sr.BaseSchemaField + "\"", getColumnFieldType(this.mSchema.Tables[sr.RelatedSchema].Columns[sr.RelatedSchemaField]), "\"" + sr.RelatedSchemaField + "\"");
                }
                if (i != this.Relations.Count - 1)
                {
                    sb.Append(" && \n");
                }
                else
                {
                    sb.Append(" ).DefaultIfEmpty() \n");
                }

                ////////////////////////////////////////// direct relationship commented due to left join missing /sampathkumar.A
                //SchemaRelation sr= new SchemaRelation() ;
                //sr=this.Relations[i];
                //if (i == 0) {
                //sb.Append(" where ");
                //}

                //sb.AppendFormat("{0}.Field<{1}>({2}) == {3}.Field<{4}>({5})\n", this.Relations[i].BaseSchema, getColumnFieldType(this.mSchema.Tables[sr.BaseSchema].Columns[sr.BaseSchemaField]), "\"" + sr.BaseSchemaField + "\"", sr.RelatedSchema, getColumnFieldType(this.mSchema.Tables[sr.RelatedSchema].Columns[sr.RelatedSchemaField]), "\"" + sr.RelatedSchemaField + "\"");

                //if (i != this.Relations.Count -1)
                //{
                //    sb.Append(" && \n");
                //}
                //////////////////////////////////////////////////////

                // Unable to solve multiple field join in relation so that it is commented /sampathkumar.a

                //if (i == 0) {
                //    sb.AppendFormat("var query = from {0} in dt_{0}.AsEnumerable()\n",this.Relations[i].BaseSchema);
                //}


                //if (sr.IsRelated == false) {
                //    sb.AppendFormat("join {0} in dt_{0}.AsEnumerable() on {1}.Field<{4}>({2}) equals {0}.Field<{5}>({3})\n", sr.RelatedSchema,
                //       this.Relations[i].BaseSchema, "\"" + sr.BaseSchemaField + "\"", "\"" + sr.RelatedSchemaField + "\"", getColumnFieldType(this.mSchema.Tables[sr.BaseSchema].Columns[sr.BaseSchemaField]),
                //       getColumnFieldType(this.mSchema.Tables[sr.RelatedSchema].Columns[sr.RelatedSchemaField]));
                //    sr.IsRelated = true;
                //}
                //sb.Append(this.getMultiCondition(sr));
                //sb.Append (this.getChildRelation(sr));
            }
            sb.Append("select new {");
            for (int ifld = 0; ifld < this.Fields.Count; ifld++)
            {
                sb.AppendFormat("  {0} = ({3} == null)? {4} : {3}.Field<{1}>({2})", this.Fields[ifld].FieldName, getFieldType(this.Fields[ifld]),
                                "\"" + this.Fields[ifld].FieldName + "\"", this.Fields[ifld].Schema, getNullValue(this.Fields[ifld]));
                if (ifld != (this.Fields.Count - 1))
                {
                    sb.AppendFormat(",");
                }
            }

            sb.Append("};\n");
            sb.Append(" DataTable rst = new DataTable();\n");
            sb.Append(" rst = ConvertToDataTable(query);\n");
            sb.Append("return rst; \n");
            sb.Append("} \n");
            sb.Append("public DataTable ConvertToDataTable<T>(IEnumerable<T> varlist) \n");
            sb.Append("{ \n");
            sb.Append("DataTable dtReturn = new DataTable(); \n");
            // column names
            sb.Append("PropertyInfo[] oProps = null; \n");
            sb.Append("if (varlist == null) return dtReturn; \n");
            sb.Append("foreach (T rec in varlist) \n");
            sb.Append("{ \n");
            sb.Append("if (oProps == null) \n");
            sb.Append("{ \n");
            sb.Append("oProps = ((Type)rec.GetType()).GetProperties(); \n");
            sb.Append("foreach (PropertyInfo pi in oProps) \n");
            sb.Append("{ \n");
            sb.Append("Type colType = pi.PropertyType; \n");

            sb.Append("if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>))) \n");
            sb.Append("{ \n");
            sb.Append("colType = colType.GetGenericArguments()[0]; \n");
            sb.Append("} \n");
            sb.Append("dtReturn.Columns.Add(new DataColumn(pi.Name, colType)); \n");
            sb.Append("} \n");
            sb.Append("} \n");
            sb.Append("DataRow dr = dtReturn.NewRow(); \n");
            sb.Append("foreach (PropertyInfo pi in oProps) \n");
            sb.Append("{ \n");
            sb.Append("dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue \n");
            sb.Append("(rec, null); \n");
            sb.Append("} \n");
            sb.Append("dtReturn.Rows.Add(dr); \n");
            sb.Append("} \n");
            sb.Append("return dtReturn; \n");
            sb.Append("} \n");
            sb.Append("} \n");
            sb.Append("}\n");

            CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());

            if (cr.Errors.Count > 0)
            {
                for (int i = 0; i < cr.Errors.Count; i++)
                {
                    SchemaErrors.Add(new SchemaError(cr.Errors[i].ErrorText, cr.Errors[i].Line));
                    return(null);
                }
            }

            System.Reflection.Assembly a = cr.CompiledAssembly;
            object     o  = a.CreateInstance("CodeEvalution.CodeEvalutor");
            Type       t  = o.GetType();
            MethodInfo mi = t.GetMethod("EvalCode");

            object[] arguments = new object[1];
            arguments[0] = this.mSchema;
            object s = mi.Invoke(o, arguments);

            return(s);
        }