コード例 #1
0
        public override void ResolveColumnAttributes(DataRowView rv, MBColumn column)
        {
            // column.CharsetSchema = rv["CHARACTER_SET_SCHEMA"].ToString();
            column.CollationCatalog = rv["COLLATION_NAME"].ToString();

            if (rv["CHARACTER_MAXIMUM_LENGTH"] != DBNull.Value)
            {
                column.CharMaxLength =
                    long.Parse(rv["CHARACTER_MAXIMUM_LENGTH"].ToString());
            }

            //if (rv["CHARACTER_OCTET_LENGTH"] != DBNull.Value)
            //    column.CharOctLength =
            //        int.Parse(rv["CHARACTER_OCTET_LENGTH"].ToString());

            if (rv["NUMERIC_PRECISION"] != DBNull.Value)
            {
                column.NumericPrecision =
                    long.Parse(rv["NUMERIC_PRECISION"].ToString());
            }

            //if (rv["NUMERIC_PRECISION_RADIX"] != DBNull.Value)
            //    column.NumericPrecisionRadix =
            //        int.Parse(rv["NUMERIC_PRECISION_RADIX"].ToString());

            if (rv["NUMERIC_SCALE"] != DBNull.Value)
            {
                column.NumericScale =
                    long.Parse(rv["NUMERIC_SCALE"].ToString());
            }

            if (rv["DATETIME_PRECISION"] != DBNull.Value)
            {
                column.DateTimePrecision =
                    long.Parse(rv["DATETIME_PRECISION"].ToString());
            }

            if (rv["COLUMN_COMMENT"] != DBNull.Value)
            {
                column.Caption = rv["COLUMN_COMMENT"].ToString();
            }

            if (rv["COLUMN_TYPE"] != DBNull.Value)
            {
                column.Spec = rv["COLUMN_TYPE"].ToString();
            }
        }
コード例 #2
0
 public override void ResolveColumnProperties(Database db, DbSet <MBProperty> properties, MBTable table, MBColumn column)
 {
 }
コード例 #3
0
 public abstract void ResolveColumnProperties(
     Database db, DbSet <MBProperty> properties, MBTable table, MBColumn column);
コード例 #4
0
 public abstract void ResolveColumnAttributes(DataRowView rv, MBColumn column);
コード例 #5
0
        public override void ResolveColumnProperties(Database db, DbSet <MBProperty> properties, MBTable table, MBColumn column)
        {
            var cmd = db.Connection.CreateCommand();

            cmd             = db.Connection.CreateCommand();
            cmd.CommandText = string.Format(propertyGet_Column, table.Name, column.Name);
            db.Connection.Open();
            using (DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        var objValue  = reader.GetValue(3);
                        var mProperty = new MBProperty()
                        {
                            TableId = table.TableId,
                            Field   = column.Name,
                            Name    = reader.GetString(2).ToString(),
                            Value   = objValue == null ? null : objValue.ToString()
                        };

                        switch (mProperty.Name)
                        {
                        case "Caption":
                            column.Caption = mProperty.Value;
                            break;
                        }

                        properties.Add(mProperty);
                    }
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// 为目标服务器注入 ____table ____column ____property,记录表格的所有信息
        /// </summary>
        public void Rebuild(
            string[] tableExcludeContains             = null,
            string[] tableExcludePrefices             = null,
            string[] columnExcludes                   = null,
            Func <string, bool> doneToConfirmContinue = null)
        {
            Database.ExecuteSqlCommand(
                string.Format("DELETE FROM {0}", TableName <MBTable>()));
            Database.ExecuteSqlCommand(
                string.Format("DELETE FROM {0}", TableName <MBColumn>()));
            Database.ExecuteSqlCommand(
                string.Format("DELETE FROM {0}", TableName <MBProperty>()));

            Database.Connection.Open();
            DataTable meta          = Database.Connection.GetSchema();
            var       alCollections = new ArrayList();

            foreach (DataRowView rv in new DataView(meta))
            {
                alCollections.Add(rv[0].ToString());
            }
            var tbSchema = Database.Connection.GetSchema(SCHEMA_TABLES);
            var dvT      = new DataView(tbSchema);
            var cSchema  = Database.Connection.GetSchema(SCHEMA_COLUMNS);
            var dvC      = new DataView(cSchema);

            Database.Connection.Close();

            dvT.Sort = "TABLE_TYPE ASC, TABLE_NAME ASC";
            for (int i = 0; i < dvT.Count; i++)
            {
                var name = dvT[i]["TABLE_NAME"].ToString();
                if (tableExcludePrefices != null &&
                    tableExcludePrefices.Any(e => name.ToLower().StartsWith(e.ToLower())))
                {
                    continue;
                }
                if (tableExcludeContains != null &&
                    tableExcludeContains.Any(e => name.ToLower().Contains(e.ToLower())))
                {
                    continue;
                }

                var tableId = Guid.NewGuid();
                var mTable  = new MBTable()
                {
                    TableId = tableId,
                    Catalog = dvT[i]["TABLE_CATALOG"].ToString(),
                    Scheme  = dvT[i]["TABLE_SCHEMA"].ToString(),
                    Name    = name,
                    Type    = dvT[i]["TABLE_TYPE"].ToString()
                };

                Tables.Add(mTable);

                _Resolver.ResolveTableAttributes(dvT[i], mTable);
                _Resolver.ResolveTablePrimaryKey(Database, Properties, mTable);
                _Resolver.ResolveTableProperties(Database, Properties, mTable);

                dvC.Sort      = "TABLE_NAME ASC, COLUMN_NAME ASC";
                dvC.RowFilter = string.Format(
                    "TABLE_CATALOG = '{0}' AND TABLE_NAME = '{1}'", mTable.Catalog, mTable.Name);
                for (int j = 0; j < dvC.Count; j++)
                {
                    var cName = dvC[j]["COLUMN_NAME"].ToString();
                    if (columnExcludes != null && columnExcludes.Any(e => name.ToLower().StartsWith(e.ToLower())))
                    {
                        continue;
                    }
                    var mColumn = new MBColumn()
                    {
                        TableId     = tableId,
                        Name        = cName,
                        Ordinal     = int.Parse(dvC[j]["ORDINAL_POSITION"].ToString()),
                        Nullable    = (dvC[j]["IS_NULLABLE"].ToString() == "YES"),
                        Type        = dvC[j]["DATA_TYPE"].ToString(),
                        CharsetName = dvC[j]["CHARACTER_SET_NAME"].ToString()
                    };

                    Columns.Add(mColumn);

                    _Resolver.ResolveColumnAttributes(dvC[j], mColumn);
                    _Resolver.ResolveColumnProperties(Database, Properties, mTable, mColumn);
                }

                if (doneToConfirmContinue != null)
                {
                    doneToConfirmContinue(mTable.Name);
                }
            }

            if (doneToConfirmContinue != null)
            {
                doneToConfirmContinue("Saving changes, please wait ..");
            }
            SaveChanges();
            if (doneToConfirmContinue != null)
            {
                doneToConfirmContinue("Done !");
            }
        }