Пример #1
0
        public string Save(string path, cfLangType clt, KeelKit.Generators.BaseGengerator.DGetFileNames getfilename)
        {
            CodeDomProvider provider = BaseGengerator.GetProvider(clt);

            string filename = getfilename != null?getfilename(path, provider.FileExtension) : GetFileNames(path, provider.FileExtension);

            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(filename, false, Encoding.UTF8), "    ");

            provider.GenerateCodeFromCompileUnit(ccu, tw, new CodeGeneratorOptions());
            tw.Close();
            string context = System.IO.File.ReadAllText(filename, Encoding.UTF8);

            if (!context.Contains("<auto-generated>") && ccu.Namespaces.Count > 0)
            {
                ccu.Namespaces[0].Comments.Clear();
                ccu.Namespaces[0].Comments.Add(new CodeCommentStatement(BaseGengerator.AddKeelKitInfo()));
                tw = new IndentedTextWriter(new StreamWriter(filename, false, Encoding.UTF8), "    ");
                provider.GenerateCodeFromCompileUnit(ccu, tw, new CodeGeneratorOptions());
                tw.Close();
            }
            return(filename);
        }
Пример #2
0
        public string  AddMapping(SQLTableInfo item)
        {
            if (item != null)
            {
                Type   t         = Keel.DB.Common.NowDataBase.PasteType(item.t_fieldtype);
                string fieldname = BaseGengerator.ClearBadChars(item.t_fieldname);
                string m         = "";
                #region 类型映射
                string ext = "";
                switch (Type.GetTypeCode(t))
                {
                case TypeCode.Boolean:
                    m = Mapping_Boolean;
                    bool b = item.t_fielddefaultvalue.Contains("1");
                    m   = m.Replace("_defaultvalue_", b.ToString());
                    ext = "chk";
                    break;

                case TypeCode.DBNull:
                    break;

                case TypeCode.DateTime:
                    m = Mapping_DateTime;
                    string strxdt = item.t_fielddefaultvalue;
                    if (strxdt.StartsWith("(") && strxdt.EndsWith(")"))
                    {
                        string[] ffdt = strxdt.Split("'".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        if (ffdt.Length >= 2)
                        {
                            strxdt = ffdt[1];
                        }
                    }
                    m   = m.Replace("_defaultvalue_", strxdt);
                    ext = "dte";
                    break;

                case TypeCode.Empty:
                    break;

                case TypeCode.Char:
                case TypeCode.String:
                    m = Mapping_String;
                    string strx = item.t_fielddefaultvalue;
                    if (strx.StartsWith("(") && strx.EndsWith(")"))
                    {
                        string[] ff = strx.Split("'".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        if (ff.Length >= 2)
                        {
                            strx = ff[1];
                        }
                    }
                    m   = m.Replace("_defaultvalue_", strx);
                    ext = "txt";
                    break;

                case TypeCode.Decimal:
                case TypeCode.Byte:
                case TypeCode.Double:
                case TypeCode.Int16:
                case TypeCode.Int32:
                case TypeCode.Int64:
                case TypeCode.SByte:
                case TypeCode.Single:
                case TypeCode.UInt16:
                case TypeCode.UInt32:
                case TypeCode.UInt64:
                    m = Mapping_Decimal;
                    decimal d;
                    string  bxf = "";
                    if (item.t_fielddefaultvalue != "" && decimal.TryParse(item.t_fielddefaultvalue.Replace("(", "").Replace(")", ""), out d))
                    {
                        bxf = d.ToString();
                    }
                    m   = m.Replace("_defaultvalue_", bxf);
                    ext = "dec";
                    break;

                case TypeCode.Object:
                default:
                    m   = Mapping_Unknow;
                    m   = m.Replace("_defaultvalue_", item.t_fielddefaultvalue);
                    ext = "ukw";
                    break;
                }
                #endregion
                string _name_ = "keelctl_" + ext + "_" + fieldname;
                m = m.Replace("_name_", _name_);
                m = m.Replace("_desc_", item.t_fielddesc.Trim() != "" ? item.t_fielddesc : item.t_fieldname);

                m = m.Replace("_lenght_", item.t_fieldlenght.ToString());
                m = m.Replace("_bitcount_", item.t_fieldbitcount.ToString());
                CtlHtml.AppendLine(m);
                return(_name_);
            }
            else
            {
                return(null);
            }
        }
Пример #3
0
        public void Gengerator(string cfNameSpace, string[] tables)
        {
            #region 生成命名空间引用
            cns = new CodeNamespace(cfNameSpace);
            cns.Imports.Add(new CodeNamespaceImport("System"));
            cns.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
            cns.Imports.Add(new CodeNamespaceImport("System.ComponentModel"));
            cns.Imports.Add(new CodeNamespaceImport("System.Data"));
            cns.Imports.Add(new CodeNamespaceImport("System.Text"));
            cns.Imports.Add(new CodeNamespaceImport("Keel"));
            cns.Comments.Add(new CodeCommentStatement(BaseGengerator.AddKeelKitInfo(false)));

            #endregion

            #region 生成类头部
            ctd            = new CodeTypeDeclaration("KeelEntities");
            ctd.IsClass    = true;
            ctd.Attributes = (ctd.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private;
            ctd.IsClass    = true;
            CodeTypeReference _KeelContext_type1 = new CodeTypeReference(typeof(Keel.KeelContext));
            ctd.BaseTypes.Add(_KeelContext_type1);

            #endregion

            #region 生成类的实例化部分

            //
            // Field idb
            //
            CodeMemberField _idb_field1 = new CodeMemberField();
            _idb_field1.Attributes = (_idb_field1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private;
            _idb_field1.Name       = "idb";
            CodeTypeReference _IDatabase_type1 = new CodeTypeReference("IDatabase");
            _idb_field1.Type = _IDatabase_type1;
            ctd.Members.Add(_idb_field1);


            //
            // Field dbo
            //
            CodeMemberField _dbo_field1 = new CodeMemberField();
            _dbo_field1.Attributes = (_dbo_field1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private;
            _dbo_field1.Name       = "dbo";
            CodeTypeReference _DBOperator1_type1 = new CodeTypeReference("DBOperator");
            _DBOperator1_type1.TypeArguments.Add(typeof(Keel.IDatabase));
            _dbo_field1.Type = _DBOperator1_type1;
            ctd.Members.Add(_dbo_field1);
            //
            // Constructor()
            //
            CodeConstructor __ctor_ctor1 = new CodeConstructor();
            __ctor_ctor1.Attributes = (__ctor_ctor1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;
            CodePropertyReferenceExpression _prop1 = new CodePropertyReferenceExpression();
            _prop1.PropertyName = "NowDataBase";
            CodeTypeReferenceExpression _ref1 = new CodeTypeReferenceExpression();
            CodeTypeReference           _Keel_DB_Common_type1 = new CodeTypeReference(typeof(Keel.DB.Common));
            _ref1.Type          = _Keel_DB_Common_type1;
            _prop1.TargetObject = _ref1;
            __ctor_ctor1.ChainedConstructorArgs.Add(_prop1);

            ctd.Members.Add(__ctor_ctor1);


            //
            // Constructor(IDatabase _idb)
            //
            CodeConstructor __ctor_ctor2 = new CodeConstructor();
            __ctor_ctor2.Attributes = (__ctor_ctor2.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;
            CodeTypeReference _IDatabase_type2            = new CodeTypeReference(typeof(Keel.IDatabase));
            CodeParameterDeclarationExpression __idb_arg1 = new CodeParameterDeclarationExpression(_IDatabase_type2, "_idb");
            __idb_arg1.Direction = FieldDirection.In;
            __idb_arg1.Name      = "_idb";
            CodeTypeReference _IDatabase_type3 = new CodeTypeReference(typeof(Keel.IDatabase));
            __idb_arg1.Type = _IDatabase_type3;
            __ctor_ctor2.Parameters.Add(__idb_arg1);

            CodeAssignStatement          _assign1 = new CodeAssignStatement();
            CodeFieldReferenceExpression _field1  = new CodeFieldReferenceExpression();
            _field1.FieldName = "idb";
            CodeThisReferenceExpression _this1 = new CodeThisReferenceExpression();
            _field1.TargetObject = _this1;
            _assign1.Left        = _field1;
            CodeVariableReferenceExpression _arg1 = new CodeVariableReferenceExpression();
            _arg1.VariableName = "_idb";
            _assign1.Right     = _arg1;
            __ctor_ctor2.Statements.Add(_assign1);

            ctd.Members.Add(__ctor_ctor2);



            //
            // Constructor(DBOperator`1 _odb)
            //
            CodeConstructor __ctor_ctor3 = new CodeConstructor();
            __ctor_ctor3.Attributes = (__ctor_ctor3.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;
            CodeTypeReference _DBOperator1_type2 = new CodeTypeReference("DBOperator");
            _DBOperator1_type2.TypeArguments.Add(typeof(Keel.IDatabase));
            CodeParameterDeclarationExpression __odb_arg1 = new CodeParameterDeclarationExpression(_DBOperator1_type2, "_odb");
            __odb_arg1.Direction = FieldDirection.In;
            __odb_arg1.Name      = "_odb";
            CodeTypeReference _DBOperator1_type3 = new CodeTypeReference("DBOperator");
            _DBOperator1_type3.TypeArguments.Add(typeof(Keel.IDatabase));
            __odb_arg1.Type = _DBOperator1_type3;
            __ctor_ctor3.Parameters.Add(__odb_arg1);

            CodeAssignStatement          _assign2 = new CodeAssignStatement();
            CodeFieldReferenceExpression _field2  = new CodeFieldReferenceExpression();
            _field2.FieldName = "dbo";
            CodeThisReferenceExpression _this2 = new CodeThisReferenceExpression();
            _field2.TargetObject = _this2;
            _assign2.Left        = _field2;
            CodeVariableReferenceExpression _arg2 = new CodeVariableReferenceExpression();
            _arg2.VariableName = "_odb";
            _assign2.Right     = _arg2;
            __ctor_ctor3.Statements.Add(_assign2);

            ctd.Members.Add(__ctor_ctor3);
            #endregion

            foreach (var item in tables)
            {
                AddItem(item);
            }
            cns.Types.Add(ctd);
            ccu.Namespaces.Add(cns);
        }
Пример #4
0
        public static void DevXC(WinFormBaseGengerator wf, int dis, ref bool lr, ref int sum, ref int maxwinwidth, ref int maxwinheight, SQLTableInfo item)
        {
            sum++;
            IComponent iclbl = wf.AddControl(typeof(
#if ENABLEDevExpress
                                                 LabelControl
#else
                                                 Label
#endif
                                                 ), "lbl" + BaseGengerator.ClearBadChars(item.t_fieldname));

            (iclbl as
#if ENABLEDevExpress
             LabelControl
#else
             Label
#endif
            ).Text = ((item.t_fielddesc != null && item.t_fielddesc as string != "") ? item.t_fielddesc : item.t_fieldname) as string;
            IComponent ictxt;
            Type       t = Keel.DB.Common.NowDataBase.PasteType(item.t_fieldtype);
            if (t.Equals(typeof(string)))
            {
                ictxt = wf.AddControl(typeof(
#if ENABLEDevExpress
                                          TextEdit
#else
                                          TextBox
#endif
                                          ), "txt" + BaseGengerator.ClearBadChars(item.t_fieldname));
            }

            else if (t.Equals(typeof(DateTime)))
            {
                ictxt = wf.AddControl(typeof(
#if ENABLEDevExpress
                                          DateEdit
#else
                                          DateTimePicker
#endif
                                          ), "dtp" + BaseGengerator.ClearBadChars(item.t_fieldname));
            }

            else if (t.Equals(typeof(decimal)) || t.Equals(typeof(Int32)) || t.Equals(typeof(float)) || t.Equals(typeof(double)) ||
                     t.Equals(typeof(byte)) || t.Equals(typeof(int)) || t.Equals(typeof(Int16)) || t.Equals(typeof(Int64))
                     )
            {
                ictxt = wf.AddControl(typeof(
#if ENABLEDevExpress
                                          SpinEdit
#else
                                          NumericUpDown
#endif
                                          ), "nud" + BaseGengerator.ClearBadChars(item.t_fieldname));
            }
            else
            {
                ictxt = wf.AddControl(typeof(
#if ENABLEDevExpress
                                          TextEdit
#else
                                          TextBox
#endif
                                          ), "txt_unsupport_type_" + BaseGengerator.ClearBadChars(item.t_fieldname));
            }

            int y;
            int xxx = Math.DivRem(sum, 2, out y) + y;
            // (ictxt as Control).Tag = item.t_fieldname;
            (ictxt as Control).TabIndex = (int)item.t_fieldindex;
            switch (lr)
            {
            default:
            case true:
                (iclbl as
#if ENABLEDevExpress
                 LabelControl
#else
                 Label
#endif
                ).Location = new Point(20 + 300, dis * xxx);
                (ictxt as Control).Location = new Point(20 + 300 + (iclbl as
#if ENABLEDevExpress
                                                                    LabelControl
#else
                                                                    Label
#endif
                                                                    ).Width + dis, dis * xxx);
                int fw = (ictxt as Control).Left + (ictxt as Control).Width;
                int fh = (ictxt as Control).Top + (ictxt as Control).Height;
                maxwinwidth  = maxwinwidth > fw ? maxwinwidth : fw;
                maxwinheight = maxwinheight > fh ? maxwinheight : fh;
                lr           = false;
                break;

            case false:
                (iclbl as
#if ENABLEDevExpress
                 LabelControl
#else
                 Label
#endif
                ).Location = new Point(20, dis * xxx);
                (ictxt as Control).Location = new Point(20 + (iclbl as
#if ENABLEDevExpress
                                                              LabelControl
#else
                                                              Label
#endif
                                                              ).Width + dis, dis * xxx);
                lr = true;
                break;
            }
        }