Additional Schema Metadata Collections
- Last Updated: April 16, 2026
- 14 minute read
- ADO.NET
- Documentation
All DataDirect providers support additional MetaData collections.
Result sets for each Metadata collection are defined in the section for each collection. However, it is important to note that the DataDirect Connect for ADO.NET data providers will not return exactly the same result set for each Metadata collection. As is standard coding practice in .NET, the data provider returns only the columns of the result set that apply to it.
Additionally, it is important to note that a data provider might not implement every Metadata collection. If a collection does not apply to a particular database, then the data provider must not implement that collection. Finally, not all restrictions are the same across providers for each collection. Restrictions that do not apply to a given data source are not implemented for that data provider's Metadata collections (for example, Catalog restrictions are not implemented for the Oracle data provider).
Therefore, it is important that applications that use the Metadata collections conform to the following best practices:
- Get result column data using the name of the column, not the ordinal, for example, using the DataTable.Columns property rather than getColumn(1). This lets the client program know whether the column exists for a given Metadata collection.
- Check for the existence of a Metadata collection before calling it. Use the MetaData collections to determine which Collections are supported, for example, by calling GetSchema(DbMetaDataCollectionNames.MetaDataCollections) on the Connection object. This lets the program know whether the given collection exists for the given data provider.
- Check for the existence of a particular restriction before using it. For example, get the restriction’s Metadata collection — GetSchema(DbMetaDataCollectionNames.Restrictions).
Catalogs Schema Collection
Description: The Catalogs collection identifies the physical attributes associated with catalogs that are accessible from the DBMS. For some systems, there may be only one catalog.
Number of restrictions: 1
Restrictions available: CATALOG_NAME
Sort order: CATALOG_NAME
Note: The Oracle data provider does not support the Catalogs collection.
Catalogs Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| CATALOG_NAME | String | Catalog name. Cannot be null. |
| DESCRIPTION | String | A description of the catalog (if any). If none, an empty string must be returned. |
Columns Schema Collection
Description: The Columns collection identifies the columns of tables (including views) defined in the catalog that are accessible to a given user. The following table identifies the columns of tables that are defined in the catalog that are accessible to a given user.
Number of restrictions: 3
Restrictions available: TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
Sort order: TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
Columns Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| CHARACTER_MAXIMUM_ LENGTH | Int32 | The maximum possible length of a value in the column. For character, binary, or bit columns, this is one of the following:
|
| CHARACTER_OCTET_LENGTH | Int32 | The maximum length in octets (bytes) of the column, if the type of the column is character or binary. A value of zero (0) means the column has no maximum length or that the column is not a character or binary column. |
| CHARACTER_SET_CATALOG | String | Catalog name in which the character set is defined. This column does not exist if the provider does not support catalogs or different character sets. |
| CHARACTER_SET_NAME | String | Character set name. This column does not exist if the provider does not support different character sets. |
| CHARACTER_SET_SCHEMA | String | Unqualified schema name in which the character set is defined. This column does not exist if the provider does not support schemas or different character sets. |
| COLLATION_CATALOG | String | The catalog name in which the collation is defined. This column exists only if the data provider supports catalogs or different collations. |
| COLLATION_NAME | String | Collation name. This column exists only if the provider supports different collations. |
| COLLATION_SCHEMA | String | Unqualified schema name in which the collation is defined. This column exists only if the data provider supports schemas or different collations. |
| COLUMN_DEFAULT | String | Default value of the column. |
| COLUMN_HASDEFAULT | Boolean | true: The column has a default value. false: The column does not have a default value, or it is unknown whether the column has a default value. |
| COLUMN_NAME | String | The name of the column; this might not be unique. This column is returned only if the data provider supports catalogs. |
| DATA_TYPE | Object | The indicator of the column's data type. If Xml Describe Type is set to Clob, this should be a System.String. Otherwise, this should be System.Byte. This value cannot be null. |
| DATETIME_PRECISION | Int32 | Datetime precision (number of digits in the fractional seconds portion) of the column if the column is a datetime. If the column's data type is not datetime, this is DbNull. |
| IS_NULLABLE | Boolean | true: The column might be nullable. false: The column is known not to be nullable. |
| NATIVE_DATA_TYPE | String | The data source description of the type. This should be BLOB. This value cannot be null. |
| NUMERIC_PRECISION | Int32 | If the column's data type is of a numeric data, this is the maximum precision of the column. This column is returned only if the data provider supports catalogs. |
| NUMERIC_PRECISION_RADIX | Int32 | The radix indicates in which base the values in NUMERIC_PRECISION and NUMERIC_SCALE are expressed. It is only useful to return either 2 or 10. This column is returned only if the data provider supports catalogs. |
| NUMERIC_SCALE | Int32 | If the column's type is a numeric type that has a scale, this is the number of digits to the right of the decimal point. This column is returned only if the data provider supports catalogs. |
| ORDINAL_POSITION | Int32 | The ordinal of the column. Columns are numbered starting from one. This column is returned only if the data provider supports catalogs. |
| PROVIDER_DEFINED_TYPE | Int32 | The data source defined type of the column is mapped to the type enumeration of the data provider. For example, for Oracle, this is the DDTek.Oracle.OracleDbType enumeration. This value cannot be null. |
| PROVIDER_GENERIC_TYPE | Int32 | The provider-defined type of the column as mapped to the System.Data.DbType enumeration. This value cannot be null. |
| TABLE_NAME | String | The table name. This column is returned only if the data provider supports catalogs. |
| TABLE_SCHEMA | String | The unqualified schema name. |
ForeignKeys Schema Collection
Description: The ForeignKeys collection identifies the foreign key columns that are defined in the catalog by a given user.
Number of restrictions: 4
Restrictions available: PK_TABLE_SCHEMA, PK_TABLE_NAME, FK_TABLE_SCHEMA, FK_TABLE_NAME
Sort order: FK_TABLE_SCHEMA, FK_TABLE_NAME
ForeignKeys Schema Collection
| Column Name | .NET Framework Datatype1 | Description |
| DEFERRABILITY | String | The deferability of the foreign key. The value is one of the following:
|
| DELETE_RULE | String | If a delete rule was specified, the value is one of the following: CASCADE: A referential action of CASCADE was specified. SET NULL: A referential action of SET NULL was specified. SET DEFAULT: A referential action of SET DEFAULT was specified. NO ACTION: A referential action of NO ACTION was specified. For some data providers, this column does not exist if they cannot determine the DELETE_RULE. In most cases, this implies a default of NO ACTION. |
| FK_COLUMN_NAME | String | Foreign key column name. |
| FK_NAME | String | Foreign key name. This column exists only if the data provider supports named foreign key constraints. |
| FK_TABLE_NAME | String | Foreign key table name. |
| FK_TABLE_SCHEMA | String | Unqualified schema name in which the foreign key table is defined. This column exists only if the data provider supports schemas. |
| ORDINAL | Int32 | The order of the column names in the key. For example, a table might contain several foreign key references to another table. The ordinal starts over for each reference; for example, two references to a three-column key would return 1, 2, 3, 1, 2, 3. |
| PK_COLUMN_NAME | String | Primary key column name. |
| PK_NAME | String | Primary key name. This column exists only if the data provider supports named primary key constraints. |
| PK_TABLE_NAME | String | Primary key table name. |
| PK_TABLE_SCHEMA | String | Unqualified schema name in which the primary key table is defined. This column exists only if the data provider supports schemas. |
| UPDATE_RULE | String | If an update rule was specified, the value is one of the following: CASCADE: A referential action of CASCADE was specified. SET NULL: A referential action of SET NULL was specified. SET DEFAULT: A referential action of SET DEFAULT was specified. NO ACTION: A referential action of NO ACTION was specified. For some data providers, this column will not exist if they cannot determine the UPDATE_RULE. In most cases, this implies a default of NO ACTION. |
Indexes Schema Collection
Description: The Indexes collection identifies the indexes that are defined in the catalog that are owned by a given user.
Number of restrictions: 4
Restrictions available: TABLE_SCHEMA, INDEX_NAME, TYPE, TABLE_NAME
Sort order: UNIQUE, TYPE, INDEX_CATALOG, INDEX_SCHEMA, INDEX_NAME, ORDINAL_POSITION
Indexes Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| CARDINALITY | Int32 | The number of unique values in the index. |
| CLUSTERED | Boolean | Determines whether an index is clustered. This is one of the following: true: The leaf nodes of the index contain full rows, not bookmarks. This is a way to represent a table clustered by key value. false: The leaf nodes of the index contain bookmarks of the base table rows whose key value matches the key value of the index entry. |
| COLLATION | String | This is one of the following: ASC: The sort sequence for the column is ascending. DESC: The sort sequence for the column is descending. This column exists only when a column sort sequence is supported. |
| COLUMN_NAME | String | The column name. |
| FILL_FACTOR | Int32 | For a B+-tree index, this property represents the storage utilization factor of page nodes during the creation of the index. The value is an integer from 0 to 100, representing the percentage of use of an index node. For a linear hash index, this property represents the storage utilization of the entire hash structure (the ratio of used area to total allocated area) before a file structure expansion occurs. |
| FILTER_CONDITION | String | The WHERE clause identifying the filtering restriction. |
| INDEX_CATALOG | String | The catalog name. This column exists only if the data provider supports catalogs. |
| INDEX_NAME | String | The index name. |
| INDEX_SCHEMA | String | The unqualified schema name. This column exists only if the data provider supports schemas. |
| INITIAL_SIZE | Int32 | The total amount of bytes allocated to this structure at creation time. |
| INTEGRATED | Boolean | Whether the index is integrated, that is, whether all base table columns are available from the index. This is one of the following: true: The index is integrated. For clustered indexes, this value must always be true. false: The index is not integrated. |
| NULL_COLLATION | String | How NULLs are collated in the index. This is one of the following: END: NULLs are collated at the end of the list, regardless of the collation order. START: NULLs are collated at the start of the list, regardless of the collation order. HIGH: NULLs are collated at the high end of the list. LOW: NULLs are collated at the low end of the list. |
| NULLS | Int32 | Whether NULL keys are allowed. This is one of the following: ALLOWNULL: The index allows entries where the key columns are NULL. DISALLOWNULL: The index does not allow entries where the key columns are NULL. If the consumer attempts to insert an index entry with a NULL key, the data provider returns an error. IGNORENULL: The index does not insert entries containing NULL keys. If the consumer attempts to insert an index entry with a NULL key, the data provider ignores that entry and no error code is returned. IGNOREANYNULL: The index does not insert entries where some column key has a NULL value. For an index having a multicolumn search key, if the consumer inserts an index entry with a NULL value in some column of the search key, the provider ignores that entry and no error code is returned. |
| ORDINAL_POSITION | Int32 | The ordinal position of the column in the index, starting with 1. |
| PAGES | Int32 | The number of pages that are used to store the index. |
| PRIMARY_KEY | Boolean | Determines whether the index represents the primary key on the table. This column does not exist if this is not known. |
| TABLE_NAME | String | The table name. |
| TABLE_SCHEMA | String | Unqualified schema name. This column exists only if the data provider supports schemas. |
| TYPE | String | The type of the index. This is one of the following: BTREE: The index is a B+-tree. HASH: The index is a hash file using, for example, linear or extensible hashing. CONTENT: The index is a content index. OTHER: The index is some other type of index. |
| UNIQUE | Boolean | Determines whether index keys must be unique. This is one of the following: true: The index keys must be unique. false: Duplicate keys are allowed. |
PrimaryKeys Schema Collection
Description: The PrimaryKeys collection identifies the primary key columns that are defined in the catalog by a given user.
Number of restrictions: 2
Restrictions available: TABLE_SCHEMA, TABLE_NAME
Sort order: TABLE_SCHEMA, TABLE_NAME
PrimaryKeys Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| COLUMN_NAME | String | The primary key column name. |
| ORDINAL | Int32 | The order of the column names in the key. |
| PK_NAME | String | The primary key name. |
| TABLE_NAME | String | The table name. |
| TABLE_SCHEMA | String | Unqualified schema name in which the table is defined. This column exists only if the data provider supports schemas. |
ProcedureParameters Schema Collection
Description: The ProcedureParameters collection returns information about the parameters and return codes of procedures that are part of the Procedures collection.
Number of restrictions: 4
Restrictions available: PROCEDURE_CATALOG, PROCEDURE_SCHEMA, PROCEDURE_NAME, PARAMETER_NAME
Sort order: PROCEDURE_CATALOG, PROCEDURE_SCHEMA, PROCEDURE_NAME, ORDINAL_POSITION
ProcedureParameters Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| CHARACTER_MAXIMUM_ LENGTH | Int32 | The maximum possible length of a value in the parameter. For character, binary, or bit parameters, this is one of the following:
|
| CHARACTER_OCTET_LENGTH | Int32 | The maximum length in octets (bytes) of the parameter, if the type of the parameter is character or binary. If the parameter has no maximum length, the value of zero (0). For all other types of parameters, the value is -1. |
| DATA_TYPE | Object | The indicator of the column's data type. This value cannot be null. |
| DESCRIPTION | String | The description of the parameter. For example, the description of the Name parameter in a procedure that adds a new employee might be Employee name. |
| IS_NULLABLE | Boolean | true: The parameter might be nullable. false: The parameter is not nullable. |
| NATIVE_DATA_TYPE | String | The data source description of the type. This value cannot be null. |
| NUMERIC_PRECISION | Int32 | If the column's data type is of a numeric data, this is the maximum precision of the column. If the column's data type is not numeric, this is DbNull. |
| NUMERIC_SCALE | Int32 | If the column's type is a numeric type that has a scale, this is the number of digits to the right of the decimal point. Otherwise, this is DbNull. |
| ORDINAL_POSITION | Int32 | If the parameter is an input, input/output, or output parameter, this is the one-based ordinal position of the parameter in the procedure call. If the parameter is the return value, this is DbNull. |
| PARAMETER_DEFAULT | String | The default value of parameter. If the default value is a NULL, then the PARAMETER_HASDEFAULT column will return true and the PARAMETER_DEFAULT column will not exist. If PARAMETER_HASDEFAULT is set to false, then the PARAMETER_DEFAULT column will not exist. |
| PARAMETER_HASDEFAULT | Int32 | true: The parameter has a default value. false: The parameter does not have a default value, or it is unknown whether the parameter has a default value. |
| PARAMETER_NAME | String | The parameter name. DbNull if the parameter is not named. |
| PARAMETER_TYPE | String | This is one of the following: INPUT: The parameter is an input parameter. INPUTOUTPUT: The parameter is an input/output parameter. OUTPUT: The parameter is an output parameter. RETURNVALUE: The parameter is a procedure return value. UNKNOWN: The parameter type is unknown to the provider. |
| PROCEDURE_CATALOG | String | The catalog name. This column exists only if the data provider supports catalogs. |
| PROCEDURE_NAME | String | The procedure name. |
| PROCEDURE_SCHEMA | String | The catalog name. This column exists only if the data provider supports schemas. |
| PROVIDER_DEFINED_TYPE | Int32 | The data source defined type of the column as mapped to the type enumeration of the data provider. For example, for the Oracle data provider, this is the DDtek.Oracle.OracleDbType enumeration. This value cannot be null. |
| PROVIDER_GENERIC_TYPE | Int32 | The data source defined type of the column as mapped to the System.Data.DbType enumeration. This value cannot be null. |
Procedures Schema Collection
Description: The Procedures schema collection identifies the procedures that are defined in the catalog. When possible, only procedures for which the connected user has execute permission should be returned.
Number of restrictions: 4
Restrictions available: PROCEDURE_CATALOG, PROCEDURE_SCHEMA, PROCEDURE_NAME, PROCEDURE_TYPE
Sort order: PROCEDURE_CATALOG, PROCEDURE_SCHEMA, PROCEDURE_NAME
Procedures Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| DESCRIPTION | String | A description of the procedure. If not available, the provider returns DbNull. |
| PROCEDURE_CATALOG | String | The catalog name. This column exists only if the data provider supports catalogs. |
| PROCEDURE_DEFINITION | String | The procedure definition, or return DbNull if the data provider does not have this information available. |
| PROCEDURE_NAME | String | The procedure name. |
| PROCEDURE_SCHEMA | String | Unqualified schema name. This column exists only if the data provider supports schemas. |
| PROCEDURE_TYPE | String | This is one of the following: UNKNOWN: It is not known whether there is a returned value. PROCEDURE: Procedure; there is no returned value. FUNCTION: Function; there is a returned value. |
Schemata Schema Collection
Description: The Schemata collection identifies the schemas that are owned by a given user.
Number of restrictions: 3
Restrictions Available: CATALOG_NAME, SCHEMA_NAME, SCHEMA_OWNER
Sort order: CATALOG_NAME, SCHEMA_NAME, SCHEMA_OWNER
Schemata Schema Collection
| Column Name | .NET Framework DataType1 | Description |
| CATALOG_NAME | String | The catalog name. This column exists only if the data provider supports catalogs. |
| DEFAULT_CHARACTER_SET_ CATALOG | String | The catalog name of the default character set for columns and domains in the schemas. This column exists only if the data provider supports catalogs. |
| DEFAULT_CHARACTER_SET_ NAME | String | The default character set name. This column exists only if the data provider supports different character sets. |
| DEFAULT_CHARACTER_SET_ SCHEMA | String | The unqualified schema name of the default character set for columns and domains in the schemas. This column exists only if the data provider supports different character sets. |
| SCHEMA_NAME | String | The unqualified schema name. |
| SCHEMA_OWNER | String | The user that owns the schemas. |
Tables Schema Collection
Number of Restrictions: 3
Restrictions Available: TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
Sort order: TABLE_TYPE, TABLE_SCHEMA, TABLE_NAME
Description: The Tables collection identifies the tables (including views) that are defined in the catalog that are accessible to a given user.
Note: For the .NET Framework datatypes, all classes are System.xxx.
Tables Schema Collection
| Column Name | Type Indicator | Description |
| TABLE_SCHEMA | String | The unqualified schema name in which the table is defined. This column exists only if the data provider supports schemas. |
| TABLE_NAME | String | Table name. |
| TABLE_TYPE | String | The table type. One of the following or a provider-specific value:
|
| DESCRIPTION | String | A description of the table. DbNull if no description is associated with the column. |
TablePrivileges Schema Collection
Description: The TablePrivileges schema collection identifies the privileges on tables that are defined in the catalog that are available to or granted by a given user.
Number of restrictions: 4
Restrictions available: TABLE_SCHEMA, TABLE_NAME, GRANTOR, GRANTEE
Sort order: TABLE_SCHEMA, TABLE_NAME, PRIVILEGE_TYPE
TablePrivileges Schema Collection
| Column Name | Type Indicator1 | Description |
| GRANTEE | String | The user name (or PUBLIC) to whom the privilege has been granted. |
| GRANTOR | String | The user who granted the privileges on the table in TABLE_NAME. |
| IS_GRANTABLE | Boolean | true: The privilege being described was granted with the WITH GRANT OPTION clause. false: The privilege being described was not granted with the WITH GRANT OPTION clause. |
| PRIVILEGE_TYPE | String | The privilege type. This is one of the following:
|
| TABLE_NAME | String | The table name. |
| TABLE_SCHEMA | String | The unqualified schema name in which the table is defined. This column exists only if the data provider supports schemas. |
Views Schema Collection
Description: The Views collection identifies the views that are defined in the catalog and that are accessible to a given user.
Number of restrictions: 2
Restrictions available: TABLE_SCHEMA, TABLE_NAME
Sort order: TABLE_SCHEMA, TABLE_NAME
Views Schema Collection
| Column Name | Type Indicator1 | Description |
| CHECK_OPTION | Boolean | A check option. This is one of the following: true: Local update checking only. false: Cascaded update checking (this has the same effect as not specifying a CHECK OPTION on the view definition). |
| DATE_CREATED | String | The date when the view was created or DbNull if the data provider does not have this information. |
| DATE_MODIFIED | String | Date when the view definition was last modified or DbNull if the data provider does not have this information. |
| DESCRIPTION | String | A description of the view. |
| IS_UPDATABLE | Boolean | true: The view can be updated. false: The view cannot be updated. |
| TABLE_NAME | String | The table name. |
| TABLE_SCHEMA | String | The unqualified schema name in which the table is defined. This column exists only if the data provider supports schemas. |
| VIEW _DEFINITION | String | The view definition. This is a query expression. |