Common Schema Collections
The common schema collections are the schema collections that are implemented by each of the .NET Framework managed providers. You can query a .NET Framework managed provider to determine the list of supported schema collections by calling the GetSchema method with no arguments, or with the schema collection name "MetaDataCollections". This will return a DataTable with a list of the supported schema collections, the number of restrictions that they each support, and the number of identifier parts that they use. These collections describe all of the required columns. Providers are free to add additional columns if they wish. For example, SqlClient
and OracleClient
add ParameterName to the restrictions collection.
If a provider is unable to determine the value of a required column, it will return null.
For more information about using the GetSchema methods, see GetSchema and Schema Collections.
MetaDataCollections
This schema collection exposes information about all of the schema collections supported by the .NET Framework managed provider that is currently used to connect to the database.
ColumnName | DataType | Description |
---|---|---|
CollectionName | string | The name of the collection to pass to the GetSchema method to return the collection. |
NumberOfRestrictions | int | The number of restrictions that may be specified for the collection. |
NumberOfIdentifierParts | int | The number of parts in the composite identifier/database object name. For example, in SQL Server, this would be 3 for tables and 4 for columns. In Oracle, it would be 2 for tables and 3 for columns. |
DataSourceInformation
This schema collection exposes information about data source that the .NET Framework managed provider is currently connect to.
ColumnName | DataType | Description |
---|---|---|
CompositeIdentifierSeparatorPattern | string | The regular expression to match the composite separators in a composite identifier. For example, "\." (for SQL Server) or "@|\." (for Oracle). A composite identifier is typically what is used for a database object name, for example: pubs.dbo.authors or pubs@dbo.authors. For SQL Server, use the regular expression "\.". For OracleClient, use "@|\.". For ODBC use the Catalog_name_separator. For OLE DB use DBLITERAL_CATALOG_SEPARATOR or DBLITERAL_SCHEMA_SEPARATOR. |
DataSourceProductName | string | The name of the product accessed by the provider, such as "Oracle" or "SQLServer". |
DataSourceProductVersion | string | Indicates the version of the product accessed by the provider, in the data sources native format and not in Microsoft format. In some cases DataSourceProductVersion and DataSourceProductVersionNormalized will be the same value. In the case of OLE DB and ODBC, these will always be the same as they are mapped to the same function call in the underlying native API. |
DataSourceProductVersionNormalized | string | A normalized version for the data source, such that it can be compared with String.Compare() . The format of this is consistent for all versions of the provider to prevent version 10 from sorting between version 1 and version 2.For example, the Oracle provider uses a format of "nn.nn.nn.nn.nn" for its normalized version, which causes an Oracle 8i data source to return "08.01.07.04.01". SQL Server uses the typical Microsoft "nn.nn.nnnn" format. In some cases, DataSourceProductVersion and DataSourceProductVersionNormalized will be the same value. In the case of OLE DB and ODBC these will always be the same as they are mapped to the same function call in the underlying native API. |
GroupByBehavior | GroupByBehavior | Specifies the relationship between the columns in a GROUP BY clause and the non-aggregated columns in the select list. |
IdentifierPattern | string | A regular expression that matches an identifier and has a match value of the identifier. For example "[A-Za-z0-9_#$]". |
IdentifierCase | IdentifierCase | Indicates whether non-quoted identifiers are treated as case sensitive or not. |
OrderByColumnsInSelect | bool | Specifies whether columns in an ORDER BY clause must be in the select list. A value of true indicates that they are required to be in the select list, a value of false indicates that they are not required to be in the select list. |
ParameterMarkerFormat | string | A format string that represents how to format a parameter. If named parameters are supported by the data source, the first placeholder in this string should be where the parameter name should be formatted. For example, if the data source expects parameters to be named and prefixed with an ':' this would be ":{0}". When formatting this with a parameter name of "p1" the resulting string is ":p1". If the data source expects parameters to be prefixed with the '@', but the names already include them, this would be '{0}', and the result of formatting a parameter named "@p1" would simply be "@p1". For data sources that do not expect named parameters and expect the use of the '?' character, the format string can be specified as simply '?', which would ignore the parameter name. For OLE DB we return '?'. |
ParameterMarkerPattern | string | A regular expression that matches a parameter marker. It will have a match value of the parameter name, if any. For example, if named parameters are supported with an '@' lead-in character that will be included in the parameter name, this would be: "(@[A-Za-z0-9_$#]*)". However, if named parameters are supported with a ':' as the lead-in character and it is not part of the parameter name, this would be: ":([A-Za-z0-9_$#]*)". Of course, if the data source doesn't support named parameters, this would simply be "?". |
ParameterNameMaxLength | int | The maximum length of a parameter name in characters. Visual Studio expects that if parameter names are supported, the minimum value for the maximum length is 30 characters. If the data source does not support named parameters, this property returns zero. |
ParameterNamePattern | string | A regular expression that matches the valid parameter names. Different data sources have different rules regarding the characters that may be used for parameter names. Visual Studio expects that if parameter names are supported, the characters "\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Nd}" are the minimum supported set of characters that are valid for parameter names. |
QuotedIdentifierPattern | string | A regular expression that matches a quoted identifier and has a match value of the identifier itself without the quotes. For example, if the data source used double-quotes to identify quoted identifiers, this would be: "(([^\"]|\"\")*)". |
QuotedIdentifierCase | IdentifierCase | Indicates whether quoted identifiers are treated as case sensitive or not. |
StatementSeparatorPattern | string | A regular expression that matches the statement separator. |
StringLiteralPattern | string | A regular expression that matches a string literal and has a match value of the literal itself. For example, if the data source used single-quotes to identify strings, this would be: "('([^']|'')*')"' |
SupportedJoinOperators | SupportedJoinOperators | Specifies what types of SQL join statements are supported by the data source. |
DataTypes
This schema collection exposes information about the data types that are supported by the database that the .NET Framework managed provider is currently connected to.
ColumnName | DataType | Description |
---|---|---|
TypeName | string | The provider-specific data type name. |
ProviderDbType | int | The provider-specific type value that should be used when specifying a parameter's type. For example, SqlDbType.Money or OracleType.Blob. |
ColumnSize | long | The length of a non-numeric column or parameter refers to either the maximum or the length defined for this type by the provider. For character data, this is the maximum or defined length in units, defined by the data source. Oracle has the concept of specifying a length and then specifying the actual storage size for some character data types. This defines only the length in units for Oracle. For date-time data types, this is the length of the string representation (assuming the maximum allowed precision of the fractional seconds component). If the data type is numeric, this is the upper bound on the maximum precision of the data type. |
CreateFormat | string | Format string that represents how to add this column to a data definition statement, such as CREATE TABLE. Each element in the CreateParameter array should be represented by a "parameter marker" in the format string. For example, the SQL data type DECIMAL needs a precision and a scale. In this case, the format string would be "DECIMAL({0},{1})". |
CreateParameters | string | The creation parameters that must be specified when creating a column of this data type. Each creation parameter is listed in the string, separated by a comma in the order they are to be supplied. For example, the SQL data type DECIMAL needs a precision and a scale. In this case, the creation parameters should contain the string "precision, scale". In a text command to create a DECIMAL column with a precision of 10 and a scale of 2, the value of the CreateFormat column might be DECIMAL({0},{1})" and the complete type specification would be DECIMAL(10,2). |
DataType | string | The name of the .NET Framework type of the data type. |
IsAutoincrementable | bool | true—Values of this data type may be auto-incrementing. false—Values of this data type may not be auto-incrementing. Note that this merely indicates whether a column of this data type may be auto-incrementing, not that all columns of this type are auto-incrementing. |
IsBestMatch | bool | true—The data type is the best match between all data types in the data store and the .NET Framework data type indicated by the value in the DataType column. false—The data type is not the best match. For each set of rows in which the value of the DataType column is the same, the IsBestMatch column is set to true in only one row. |
IsCaseSensitive | bool | true—The data type is a character type and is case-sensitive. false—The data type is not a character type or is not case-sensitive. |
IsFixedLength | bool | true—Columns of this data type created by the data definition language (DDL) will be of fixed length. false—Columns of this data type created by the DDL will be of variable length. DBNull.Value—It is not known whether the provider will map this field with a fixed-length or variable-length column. |
IsFixedPrecisionScale | bool | true—The data type has a fixed precision and scale. false—The data type does not have a fixed precision and scale. |
IsLong | bool | true—The data type contains very long data; the definition of very long data is provider-specific. false—The data type does not contain very long data. |
IsNullable | bool | true—The data type is nullable. false—The data type is not nullable. DBNull.Value—It is not known whether the data type is nullable. |
IsSearchable | bool | true—The data type can be used in a WHERE clause with any operator except the LIKE predicate. false—The data type cannot be used in a WHERE clause with any operator except the LIKE predicate. |
IsSearchableWithLike | bool | true—The data type can be used with the LIKE predicate false—The data type cannot be used with the LIKE predicate. |
IsUnsigned | bool | true—The data type is unsigned. false—The data type is signed. DBNull.Value—Not applicable to data type. |
MaximumScale | short | If the type indicator is a numeric type, this is the maximum number of digits allowed to the right of the decimal point. Otherwise, this is DBNull.Value. |
MinimumScale | short | If the type indicator is a numeric type, this is the minimum number of digits allowed to the right of the decimal point. Otherwise, this is DBNull.Value. |
IsConcurrencyType | bool | true – the data type is updated by the database every time the row is changed and the value of the column is different from all previous values false – the data type is note updated by the database every time the row is changed DBNull.Value – the database does not support this type of data type |
IsLiteralSupported | bool | true – the data type can be expressed as a literal false – the data type can not be expressed as a literal |
LiteralPrefix | string | The prefix applied to a given literal. |
LiteralSuffix | string | The suffix applied to a given literal. |
NativeDataType | String | NativeDataType is an OLE DB specific column for exposing the OLE DB type of the data type . |
Restrictions
This schema collection exposed information about the restrictions that are supported by the .NET Framework managed provider that is currently used to connect to the database.
ColumnName | DataType | Description |
---|---|---|
CollectionName | string | The name of the collection that these restrictions apply to. |
RestrictionName | string | The name of the restriction in the collection. |
RestrictionDefault | string | Ignored. |
RestrictionNumber | int | The actual location in the collections restrictions that this particular restriction falls in. |
ReservedWords
This schema collection exposes information about the words that are reserved by the database that the .NET Framework managed provider that is currently connected to.
ColumnName | DataType | Description |
---|---|---|
ReservedWord | string | Provider specific reserved word. |