Beispiel #1
0
 public override void ResolveTableAttributes(DataRowView rv, MBTable table)
 {
     if (rv["TABLE_COMMENT"] != DBNull.Value)
     {
         table.Caption = rv["TABLE_COMMENT"].ToString();
     }
 }
Beispiel #2
0
        public override void ResolveTableProperties(Database db, DbSet <MBProperty> properties, MBTable table)
        {
            var cmd = db.Connection.CreateCommand();

            cmd.CommandText = string.Format(propertyGet_Table, table.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   = string.Empty,
                            Name    = reader.GetString(2).ToString(),
                            Value   = objValue == null ? null : objValue.ToString()
                        };

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

                        properties.Add(mProperty);
                    }
                }
            }
        }
Beispiel #3
0
        public override void ResolveTablePrimaryKey(Database db, DbSet <MBProperty> properties, MBTable table)
        {
            var cmd = db.Connection.CreateCommand();

            cmd.CommandText = "exec sp_helpconstraint '" + table.Name + "'";
            db.Connection.Open();
            using (DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                reader.NextResult();
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        if (reader.GetString(0).ToString().StartsWith("PRIMARY KEY"))
                        {
                            table.KeyInfo = reader.GetString(6);
                        }
                    }
                }
            }
        }
Beispiel #4
0
 public override void ResolveTableAttributes(DataRowView rv, MBTable table)
 {
 }
Beispiel #5
0
 public override void ResolveColumnProperties(Database db, DbSet <MBProperty> properties, MBTable table, MBColumn column)
 {
 }
Beispiel #6
0
 public override void ResolveTableProperties(Database db, DbSet <MBProperty> properties, MBTable table)
 {
 }
Beispiel #7
0
        public override void ResolveTablePrimaryKey(Database db, DbSet <MBProperty> properties, MBTable table)
        {
            var cmd = db.Connection.CreateCommand();

            cmd.CommandText = string.Format(
                @"select column_name from information_schema.key_column_usage where table_schema = '{0}' and table_name = '{1}' and constraint_name = 'PRIMARY' order by ordinal_position",
                db.Connection.Database, table.Name);
            db.Connection.Open();
            var keys = new List <string>();

            using (DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        keys.Add(reader.GetString(0));
                    }
                }
            }

            if (keys.Count > 0)
            {
                table.KeyInfo = keys.ToFlat();
            }
        }
Beispiel #8
0
 public abstract void ResolveColumnProperties(
     Database db, DbSet <MBProperty> properties, MBTable table, MBColumn column);
Beispiel #9
0
 public abstract void ResolveTableProperties(
     Database db, DbSet <MBProperty> properties, MBTable table);
Beispiel #10
0
 public abstract void ResolveTableAttributes(DataRowView rv, MBTable table);
Beispiel #11
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 !");
            }
        }