public override void GetTables(Common.Entities.MetaDataSchema.Project project)
 {
     foreach (Entities.MetaDataSchema.Database dbase in project.Databases)
     {
         System.Data.DataTable tables = new DataTable();
         System.Data.DataTable sqlServerTable = new DataTable();
         tables.Load(project.ExtractorManager.SelectStatement("Select * From " + dbase.Name + ".INFORMATION_SCHEMA.TABLES Where Table_Type = '" + Resources.DataStructure.TableType + "'"), LoadOption.OverwriteChanges);
         sqlServerTable.Load(project.ExtractorManager.SelectStatement("Select * From " + dbase.Name + ".sys.all_objects Where Type_Desc = 'user_table'"), LoadOption.OverwriteChanges);
         OnStartLoading(new Common.Events.LoadingEventArgs(dbase.Name,"Tables","Database"));
         dbase.Tables.Clear();
         foreach (DataRow row in tables.Rows)
         {
             
             Entities.MetaDataSchema.Table tbl = new Common.Entities.MetaDataSchema.Table();
             tbl.ParentDatabase = dbase;
             tbl.Schema = row["Table_Schema"].ToString();
             tbl.Name = row["Table_Name"].ToString();
             DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + tbl.Name + "'");
             if (sqlRows.Length > 0)
             {
                 tbl.TableID = sqlRows[0]["object_id"].ToString();
             }
             if (project.CheckHasData)
             {
                 tbl.DataCount = CountRecordsInTable(tbl);
                 tbl.HasData = tbl.DataCount > 0;
             }
             dbase.Tables.Add(tbl);
         }
         OnEndLoading(new Common.Events.LoadingEventArgs(dbase.Name, "Tables","Database"));
         tables.Dispose();
     }
     GC.Collect();
 }
 public override void GetTables(Common.Entities.MetaDataSchema.Project project)
 {
     foreach (Entities.MetaDataSchema.Database dbase in project.Databases)
     {
         System.Data.DataTable tables         = new DataTable();
         System.Data.DataTable sqlServerTable = new DataTable();
         tables.Load(project.ExtractorManager.SelectStatement("Select * From " + dbase.Name + ".INFORMATION_SCHEMA.TABLES Where Table_Type = '" + Resources.DataStructure.TableType + "'"), LoadOption.OverwriteChanges);
         sqlServerTable.Load(project.ExtractorManager.SelectStatement("Select * From " + dbase.Name + ".sys.all_objects Where Type_Desc = 'user_table'"), LoadOption.OverwriteChanges);
         OnStartLoading(new Common.Events.LoadingEventArgs(dbase.Name, "Tables", "Database"));
         dbase.Tables.Clear();
         foreach (DataRow row in tables.Rows)
         {
             Entities.MetaDataSchema.Table tbl = new Common.Entities.MetaDataSchema.Table();
             tbl.ParentDatabase = dbase;
             tbl.Schema         = row["Table_Schema"].ToString();
             tbl.Name           = row["Table_Name"].ToString();
             DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + tbl.Name + "'");
             if (sqlRows.Length > 0)
             {
                 tbl.TableID = sqlRows[0]["object_id"].ToString();
             }
             if (project.CheckHasData)
             {
                 tbl.DataCount = CountRecordsInTable(tbl);
                 tbl.HasData   = tbl.DataCount > 0;
             }
             dbase.Tables.Add(tbl);
         }
         OnEndLoading(new Common.Events.LoadingEventArgs(dbase.Name, "Tables", "Database"));
         tables.Dispose();
     }
     GC.Collect();
 }
 public override void GetTables(Common.Entities.MetaDataSchema.Database database)
 {
     System.Data.DataTable tables = new DataTable();
     System.Data.DataTable sqlServerTable = new DataTable();
     tables.Load(database.ParentProject.ExtractorManager.SelectStatement(String.Format("Select * From {0}.INFORMATION_SCHEMA.TABLES Where Table_Type = '{1}'", database.Name, Resources.DataStructure.TableType)), LoadOption.OverwriteChanges);
     sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement(String.Format("Select * From {0}.sys.all_objects Where Type_Desc = 'user_table'", database.Name)), LoadOption.OverwriteChanges);
     database.Tables.Clear();
     foreach (DataRow row in tables.Rows)
     {
         Entities.MetaDataSchema.Table tbl = new Common.Entities.MetaDataSchema.Table();
         
         tbl.ParentDatabase = database;
         tbl.Schema = row["Table_Schema"].ToString();
         tbl.Name = row["Table_Name"].ToString();
         DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + tbl.Name + "'");
         if (sqlRows.Length > 0)
         {
             tbl.TableID = sqlRows[0]["object_id"].ToString();
         }
         if(database.ParentProject.CheckHasData)
         {
             tbl.DataCount = CountRecordsInTable(tbl);
             tbl.HasData = tbl.DataCount > 0;
         }
         database.Tables.Add(tbl);
     }
 }
        public override void GetTables(Common.Entities.MetaDataSchema.Database database)
        {
            System.Data.DataTable tables         = new DataTable();
            System.Data.DataTable sqlServerTable = new DataTable();
            tables.Load(database.ParentProject.ExtractorManager.SelectStatement(String.Format("Select * From {0}.INFORMATION_SCHEMA.TABLES Where Table_Type = '{1}'", database.Name, Resources.DataStructure.TableType)), LoadOption.OverwriteChanges);
            sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement(String.Format("Select * From {0}.sys.all_objects Where Type_Desc = 'user_table'", database.Name)), LoadOption.OverwriteChanges);
            database.Tables.Clear();
            foreach (DataRow row in tables.Rows)
            {
                Entities.MetaDataSchema.Table tbl = new Common.Entities.MetaDataSchema.Table();

                tbl.ParentDatabase = database;
                tbl.Schema         = row["Table_Schema"].ToString();
                tbl.Name           = row["Table_Name"].ToString();
                DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + tbl.Name + "'");
                if (sqlRows.Length > 0)
                {
                    tbl.TableID = sqlRows[0]["object_id"].ToString();
                }
                if (database.ParentProject.CheckHasData)
                {
                    tbl.DataCount = CountRecordsInTable(tbl);
                    tbl.HasData   = tbl.DataCount > 0;
                }
                database.Tables.Add(tbl);
            }
        }
        public override void GetChildRelations(Common.Entities.MetaDataSchema.Table table)
        {
            DataTable relations = new DataTable();
            string    query     = string.Format(@"select * From 
(select sv.*,cu.COLUMN_NAME as ParentColumn,cu.TABLE_CATALOG as ParentCatalog,cu.TABLE_NAME as ParentTable,cu.TABLE_SCHEMA as ParentSchema
From 
(select r.CONSTRAINT_NAME,r.UNIQUE_CONSTRAINT_CATALOG,r.UNIQUE_CONSTRAINT_NAME,r.UNIQUE_CONSTRAINT_SCHEMA,r.UPDATE_RULE,t.CONSTRAINT_CATALOG,t.CONSTRAINT_SCHEMA,t.CONSTRAINT_TYPE,t.TABLE_CATALOG,t.TABLE_NAME,t.TABLE_SCHEMA,c.COLUMN_NAME,c.ORDINAL_POSITION
From {0}.INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as r
INNER JOIN {0}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS as t on r.CONSTRAINT_NAME = t.CONSTRAINT_NAME 
INNER JOIN {0}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE as c on
t.CONSTRAINT_NAME = c.CONSTRAINT_NAME) as sv Inner Join
{0}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE as cu on sv.UNIQUE_CONSTRAINT_NAME = cu.CONSTRAINT_NAME
) as mview
where ParentTable = '{2}' AND ParentSchema = '{1}'
", table.ParentDatabase.Name, table.Schema, table.Name);
            List <Common.Entities.MetaDataSchema.RelationShip> _ChildRelationShips = new List <Common.Entities.MetaDataSchema.RelationShip>();

            relations.Load(table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(query), LoadOption.OverwriteChanges);
            foreach (DataRow row in relations.Rows)
            {
                Common.Entities.MetaDataSchema.RelationShip relationShip = new Entities.MetaDataSchema.RelationShip();
                relationShip.Name         = row["CONSTRAINT_NAME"].ToString();
                relationShip.ChildTable   = new Entities.MetaDataSchema.Table(row["TABLE_NAME"].ToString(), row["TABLE_SCHEMA"].ToString(), table.ParentDatabase);
                relationShip.ChildColumn  = new Entities.MetaDataSchema.Column(row["COLUMN_NAME"].ToString());
                relationShip.MasterTable  = new Entities.MetaDataSchema.Table(row["ParentTable"].ToString(), row["ParentSchema"].ToString(), table.ParentDatabase);
                relationShip.ParentColumn = new Entities.MetaDataSchema.Column(row["ParentColumn"].ToString());
                _ChildRelationShips.Add(relationShip);
            }
            table.ChildRelationShips = _ChildRelationShips;
        }
        public int CountRecordsInTable(Common.Entities.MetaDataSchema.Table table)
        {
            IDataReader reader = table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(string.Format("select isnull(count(*),0) from [{0}].[{1}].[{2}]", table.ParentDatabase.Name, table.Schema, table.Name));
            int         result = 0;

            if (reader.Read())
            {
                result = reader.GetInt32(0);
            }
            return(result);
        }
 public override void GetTableRelations(Common.Entities.MetaDataSchema.Table table)
 {
     GetParentRelations(table);
     GetChildRelations(table);
 }
        public override void GetColumns(Common.Entities.MetaDataSchema.Table table)
        {
            System.Data.DataTable tables         = new DataTable();
            System.Data.DataTable sqlServerTable = new DataTable();
            //System.Data.DataTable sqlObjectsTable = new DataTable();
            System.Data.DataTable keyConstraints = new DataTable();
            tables.Load(table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(String.Format("Select * From {0}.INFORMATION_SCHEMA.COLUMNS", table.ParentDatabase.Name)), LoadOption.OverwriteChanges);
            //sqlObjectsTable.Load(table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement("Select * From " + table.ParentDatabase.Name + ".sys.objects"), LoadOption.OverwriteChanges);
            sqlServerTable.Load(table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(String.Format("Select * From {0}.sys.all_columns", table.ParentDatabase.Name)), LoadOption.OverwriteChanges);

            string query = String.Format("Select c.Constraint_Type,t.Column_Name,c.Table_Name,c.Table_Schema From {0}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS as c Inner join {0}.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as t on c.Constraint_Name = t.Constraint_Name", table.ParentDatabase.Name);

            //Select * From INFORMATION_SCHEMA.KEY_COLUMN_USAGE
            //"Select * From " + table.ParentDatabase.Name + ".INFORMATION_SCHEMA.KEY_COLUMN_USAGE"
            keyConstraints.Load(table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(query), LoadOption.OverwriteChanges);

            DataRow[] standRows = tables.Select(String.Format("Table_Schema = '{0}' AND Table_Name = '{1}'", table.Schema, table.Name));
            DataRow[] sqlRows   = null;// sqlServerTable.Select("object_id = " + table.TableID);
            DataRow[] keyRows   = null;
            OnStartLoading(new Common.Events.LoadingEventArgs(table.Name, "Columns", "Table"));
            table.Columns.Clear();
            foreach (DataRow row in standRows)
            {
                Entities.MetaDataSchema.Column col = new Common.Entities.MetaDataSchema.Column();
                col.ParentTable     = table;
                col.Name            = row["Column_Name"].ToString();
                col.OrdinalPosition = Convert.ToInt32(row["Ordinal_Position"]);
                if (row["Is_Nullable"].ToString().ToLower() == "yes")
                {
                    col.AllowNull = true;
                }
                else
                {
                    col.AllowNull = false;
                }
                col.ColumnDataType.SQLType = row["Data_Type"].ToString();
                if (row["Character_Maximum_Length"] != DBNull.Value)
                {
                    col.Length = Convert.ToInt32(row["Character_Maximum_Length"]);
                }

                sqlRows = sqlServerTable.Select("object_id = " + table.TableID + " AND [name] = '" + col.Name + "'");

                if (sqlRows.Length > 0)
                {
                    col.IsIdentity = Convert.ToBoolean(sqlRows[0]["is_identity"]);
                    col.IsComputed = Convert.ToBoolean(sqlRows[0]["is_computed"]);
                    col.Precision  = Convert.ToInt32(sqlRows[0]["precision"]);
                    col.Scale      = Convert.ToInt32(sqlRows[0]["scale"]);
                    col.ColumnId   = sqlRows[0]["column_id"].ToString();
                    keyRows        = keyConstraints.Select("Table_Schema = '" + table.Schema + "' AND Table_Name = '" + table.Name + "' AND Column_Name = '" + col.Name + "'");
                    foreach (DataRow key in keyRows)
                    {
                        if (key["Constraint_Type"].ToString() == "PRIMARY KEY")
                        {
                            col.IsPrimary = true;
                        }
                        else if (key["Constraint_Type"].ToString() == "FOREIGN KEY")
                        {
                            col.IsForeign = true;
                        }
                    }
                    //keyRows = keyConstraints.Select("TABLE_Name = '" + table.Name + "' AND Column_Name = '" + col.Name + "'");
                    //foreach(DataRow key in keyRows)
                    //{
                    //    string ordinalKey = key["Column_Name"].ToString();
                    //    DataRow[] objectRelationRow = sqlObjectsTable.Select("name = '" + key["Constraint_Name"] + "'");
                    //    if (objectRelationRow.Length > 0)
                    //    {
                    //        if (objectRelationRow[0]["type"].ToString().Trim() == "PK")
                    //            col.IsPrimary = true;
                    //        else if ((objectRelationRow[0]["type"].ToString().Trim() == "FK" || objectRelationRow[0]["type"].ToString().Trim() == "F"))
                    //            col.IsForeign = true;
                    //    }
                    //}
                }
                table.Columns.Add(col);
            }
            OnEndLoading(new Common.Events.LoadingEventArgs(table.Name, "Columns", "Table"));
            GC.Collect();
        }