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 GetDatabases(Common.Entities.MetaDataSchema.Project project)
 {
     System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(project.ExtractorManager.ConnectionString);
     conn.Open();
     Microsoft.SqlServer.Management.Common.ServerConnection connection = new Microsoft.SqlServer.Management.Common.ServerConnection(conn);
     Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(connection);
     project.Databases.Clear();
     foreach (Microsoft.SqlServer.Management.Smo.Database database in server.Databases)
     {
         Entities.MetaDataSchema.Database db = new Common.Entities.MetaDataSchema.Database();
         db.Name = database.Name;
         db.ParentProject = project;
         project.Databases.Add(db);
         project.AddDatabaseNode(project.SchemaDataset.Schema, db.GuidId, "", db.Name, db.Name);
     }
 }
 public override void GetDatabases(Common.Entities.MetaDataSchema.Project project)
 {
     System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(project.ExtractorManager.ConnectionString);
     conn.Open();
     Microsoft.SqlServer.Management.Common.ServerConnection connection = new Microsoft.SqlServer.Management.Common.ServerConnection(conn);
     Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(connection);
     project.Databases.Clear();
     foreach (Microsoft.SqlServer.Management.Smo.Database database in server.Databases)
     {
         Entities.MetaDataSchema.Database db = new Common.Entities.MetaDataSchema.Database();
         db.Name          = database.Name;
         db.ParentProject = project;
         project.Databases.Add(db);
         project.AddDatabaseNode(project.SchemaDataset.Schema, db.GuidId, "", db.Name, db.Name);
     }
 }
        public override void GetFunctions(Common.Entities.MetaDataSchema.Database database)
        {
            System.Data.DataTable functions      = new DataTable();
            System.Data.DataTable sqlServerTable = new DataTable();
            functions.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE = 'FUNCTION'"), LoadOption.OverwriteChanges);
            sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".sys.all_objects Where [Type] = 'FN'"), LoadOption.OverwriteChanges);
            database.Functions.Clear();
            foreach (DataRow row in functions.Rows)
            {
                Entities.MetaDataSchema.Function function = new Common.Entities.MetaDataSchema.Function();

                function.ParentDatabase = database;
                function.Schema         = row["Routine_Schema"].ToString();
                function.Name           = row["Routine_Name"].ToString();
                DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + function.Name + "'");
                if (sqlRows.Length > 0)
                {
                    function.FunctionId = sqlRows[0]["object_id"].ToString();
                }
                //GetColumns(view);
                database.Functions.Add(function);
            }
        }
        public override void GetViews(Common.Entities.MetaDataSchema.Database database)
        {
            System.Data.DataTable views          = new DataTable();
            System.Data.DataTable sqlServerTable = new DataTable();
            views.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".INFORMATION_SCHEMA.VIEWS Order By Table_Name"), LoadOption.OverwriteChanges);
            sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".sys.all_objects Where Type_Desc = 'VIEW'"), LoadOption.OverwriteChanges);
            database.Views.Clear();
            foreach (DataRow row in views.Rows)
            {
                Entities.MetaDataSchema.View view = new Common.Entities.MetaDataSchema.View();

                view.ParentDatabase = database;
                view.Schema         = row["Table_Schema"].ToString();
                view.Name           = row["Table_Name"].ToString();
                DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + view.Name + "'");
                if (sqlRows.Length > 0)
                {
                    view.ViewID = sqlRows[0]["object_id"].ToString();
                }
                //GetColumns(view);
                database.Views.Add(view);
            }
        }
        public override void GetColumns(Common.Entities.MetaDataSchema.Database database)
        {
            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(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".INFORMATION_SCHEMA.COLUMNS"), LoadOption.OverwriteChanges);
            sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".sys.all_columns"), LoadOption.OverwriteChanges);
            string query = "Select c.Constraint_Type,t.Column_Name,c.Table_Name,c.Table_Schema From " + database.Name + ".INFORMATION_SCHEMA.TABLE_CONSTRAINTS as c Inner join " + database.Name + ".INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as t on c.Constraint_Name = t.Constraint_Name";

            //sqlObjectsTable.Load(table.ParentDatabase.ParentProject.ExtractorManager.SelectStatement("Select * From " + table.ParentDatabase.Name + ".sys.objects"), LoadOption.OverwriteChanges);
            keyConstraints.Load(database.ParentProject.ExtractorManager.SelectStatement(query), LoadOption.OverwriteChanges);

            foreach (Entities.MetaDataSchema.Table table in database.Tables)
            {
                OnStartLoading(new Common.Events.LoadingEventArgs(table.Name, "Columns", "Table"));
                DataRow[] standRows = tables.Select("Table_Schema = '" + table.Schema + "' AND Table_Name = '" + table.Name + "'");
                DataRow[] sqlRows   = null;// sqlServerTable.Select("object_id = " + table.TableID);
                DataRow[] keyRows   = null;
                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]["object_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;
                            }
                        }
                    }
                    table.Columns.Add(col);
                }
                OnEndLoading(new Common.Events.LoadingEventArgs(table.Name, "Columns", "Table"));
            }
            GC.Collect();
        }