예제 #1
0
        public override TableName[] GetTableNames(DatabaseName dname)
        {
            if (dname.Provider.Version >= 2005)
            {
                var table = dname.FillDataTable($"USE [{dname.Name}] ; SELECT SCHEMA_NAME(schema_id) AS SchemaName, name as TableName FROM sys.Tables ORDER BY SchemaName,Name");
                if (table != null)
                {
                    return(table
                           .AsEnumerable()
                           .Select(row => new TableName(dname, row.Field <string>("SchemaName"), row.Field <string>("TableName")))
                           .ToArray());
                }
            }
            else
            {
                var table = dname.FillDataTable($"USE [{dname.Name}] ; EXEC sp_tables");
                if (table != null)
                {
                    return(table
                           .AsEnumerable()
                           .Where(row => row.Field <string>("TABLE_TYPE") == "TABLE")
                           .Select(row => new TableName(dname, row.Field <string>("TABLE_OWNER"), row.Field <string>("TABLE_NAME")))
                           .ToArray());
                }
            }

            return(new TableName[] { });
        }
예제 #2
0
        public override TableName[] GetProcedureNames(DatabaseName dname)
        {
            var table = dname.FillDataTable($"USE [{dname.Name}]; SELECT ROUTINE_SCHEMA,ROUTINE_NAME,ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES");

            var L = table.AsEnumerable().Select(row => new
            {
                type   = row.Field <string>("ROUTINE_TYPE"),
                schema = row.Field <string>("ROUTINE_SCHEMA"),
                name   = row.Field <string>("ROUTINE_NAME")
            })
                    .Where(row => !(row.name.StartsWith("sp_") || row.name.StartsWith("fn_")))              //System Procedure or Function
                    .OrderByDescending(row => row.type)                                                     // Sort: Procedure, Function
                    .ThenBy(row => row.name)
                    .ToList();

            List <TableName> list = new List <TableName>();

            foreach (var row in L)
            {
                TableNameType type = TableNameType.Table;

                switch (row.type)
                {
                case "PROCEDURE":
                    type = TableNameType.Procedure;
                    break;

                case "FUNCTION":
                    type = TableNameType.Function;
                    break;
                }

                TableName tname = new TableName(dname, row.schema, row.name)
                {
                    Type = type
                };

                list.Add(tname);
            }

            return(list.ToArray());
        }
예제 #3
0
        public override TableName[] GetProcedureNames(DatabaseName dname)
        {
            var table = dname.FillDataTable($"USE [{dname.Name}]; SELECT ROUTINE_SCHEMA,ROUTINE_NAME,ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES");

            List <TableName> list = new List <TableName>();

            foreach (DataRow row in table.Rows)
            {
                string        type   = row.Field <string>("ROUTINE_TYPE");
                string        schema = row.Field <string>("ROUTINE_SCHEMA");
                string        name   = row.Field <string>("ROUTINE_NAME");
                TableNameType _type  = TableNameType.Table;

                //System Procedure or Function
                if (name.StartsWith("sp_") || name.StartsWith("fn_"))
                {
                    continue;
                }

                switch (type)
                {
                case "PROCEDURE":
                    _type = TableNameType.Procedure;
                    break;

                case "FUNCTION":
                    _type = TableNameType.Function;
                    break;
                }

                TableName tname = new TableName(dname, schema, name)
                {
                    Type = _type
                };

                list.Add(tname);
            }

            return(list.ToArray());
        }