常见架构集合

常见的架构集合是由每个 .NET Framework 托管提供程序实现的架构集合。 可以通过调用不带参数的 GetSchema 方法或架构集合名称“MetaDataCollections”来查询 .NET Framework 托管提供程序来确定支持的架构集合的列表。 此时将返回 DataTable,包含支持的架构集合列表、每个架构集合支持的限制数以及所使用的标识符部分数。 这些集合描述所有必需的列。 提供商可以自由地根据需要添加额外的列。 例如,SqlClientOracleClient 将 ParameterName 添加到限制集合中。

如果提供程序无法确定所需列的值,将返回空值。

有关使用 GetSchema 方法的详细信息,请参阅 GetSchema 和架构集合

MetaDataCollections

此架构集合公开了 .NET Framework 托管提供程序当前用于连接到数据库的所有架构集合的相关信息。

ColumnName 数据类型 DESCRIPTION
集合名称 字符串 为返回集合传递给 GetSchema 方法的集合名称。
NumberOfRestrictions 整数 (int) 可以为集合指定的限制数。
NumberOfIdentifierParts 整数 (int) 复合标识符/数据库对象名称中的部分数。 例如,在 SQL Server 中,表的代码为 3,列的代码为 4。 在 Oracle 中,表的编号是 2,列的编号是 3。

数据源信息

此架构集合公开有关 .NET Framework 托管提供程序当前连接到的数据源的信息。

ColumnName 数据类型 DESCRIPTION
CompositeIdentifierSeparatorPattern 字符串 匹配复合标识符中的复合分隔符的正则表达式。 例如,“\.”(对于 SQL Server)或“@|\”。(对于 Oracle)。

复合标识符通常用于数据库对象名称,例如:pubs.dbo.authors 或 pubs@dbo.authors。

对于 SQL Server,请使用正则表达式“\.”。 对于 OracleClient,请使用“@|\.”。

对于 ODBC,请使用 Catalog_name_separator。

对于 OLE DB,使用 DBLITERAL_CATALOG_SEPARATOR 或 DBLITERAL_SCHEMA_SEPARATOR。
DataSourceProductName 字符串 提供者访问的产品名称,例如“Oracle”或“SQLServer”。
DataSourceProductVersion 字符串 指示提供程序访问的产品版本,采用数据源本机格式,而不是 Microsoft 格式。

在某些情况下,DataSourceProductVersion 和 DataSourceProductVersionNormalized 的值相同。 对于 OLE DB 和 ODBC,它们始终保持一致,这是因为它们映射到基础本机 API 的同一函数调用。
DataSourceProductVersionNormalized 字符串 数据源的标准化版本,以便可以使用 String.Compare() 进行比较。 此格式对于提供程序的所有版本都是一致的,以防止版本 10 在版本 1 和版本 2 之间进行排序。

例如,Oracle 提供程序对其规范化版本使用“nn.nn.nn.nn.nn.nn”格式,这会导致 Oracle 8i 数据源返回“08.01.07.04.01”。 SQL Server 使用典型的Microsoft“nn.nn.nnnn”格式。

在某些情况下,DataSourceProductVersion 和 DataSourceProductVersionNormalized 的值相同。 对于 OLE DB 和 ODBC,这两个值始终相同,因为它们映射到基础本机 API 中相同的函数调用。
GroupByBehavior GroupByBehavior 指定 GROUP BY 子句中的列与选择列表中的非聚合列之间的关系。
IdentifierPattern 字符串 匹配标识符并且包含标识符的匹配值的正则表达式。 例如“[A-Za-z0-9_#$]”。
IdentifierCase IdentifierCase 表示未加引号的标识符是否区分大小写。
OrderByColumnsInSelect 布尔 指定 ORDER BY 子句中的列是否必须在选择列表中。 true 值表示它们必须位于选择列表中,值为 false 表示它们不需要位于选择列表中。
ParameterMarkerFormat 字符串 表示如何格式化参数的格式化字符串。

如果数据源不支持命名的参数,此字符串中的第一个占位符应是格式化参数名的位置。

例如,如果数据源要求参数命名并加上前缀为“:”,则为“:{0}”。 使用参数名称“p1”设置此格式时,生成的字符串为“:p 1”。

如果数据源要求参数以“@”为前缀,但名称已包含它们,则为“”{0},而格式化名为“@p1”的参数的结果只是“@p1”。

对于不需要命名参数且需要使用“?”字符的数据源,格式字符串可以指定为“?”,这将忽略参数名称。 对于 OLE DB,我们返回“?”。
ParameterMarkerPattern 字符串 匹配参数标记的正则表达式。 该表达式将包含参数名的匹配值(如果有)。

例如,如果命名参数支持使用“@”作为前导字符,并将其包含在参数名称中,则表示为:“(@[A-Za-z0-9_$#]*)”。

但是,如果使用“:”作为前导字符支持命名参数,并且它不是参数名称的一部分,则为:“:([A-Za-z0-9_$#]*”。

当然,如果数据源不支持命名参数,则这只是“?”。
ParameterNameMaxLength 整数 (int) 参数名的最大长度(字符数)。 Visual Studio 期望如果支持参数名,最大长度的最小值为 30 个字符。

如果数据源不支持命名参数,则此属性返回零。
ParameterNamePattern 字符串 匹配有效参数名的正则表达式。 不同的数据源对可用于参数名称的字符有不同的规则。

Visual Studio 要求,如果支持参数名称,则字符“\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Nd}”是参数名称支持的最低受支持字符集。
QuotedIdentifierPattern 字符串 匹配加引号的标识符并且包含标识符本身(不加引号)的匹配值的正则表达式。 例如,如果数据源使用双引号标识加引号的标识符,将为“(([^\"]|\"\")*)”。
QuotedIdentifierCase IdentifierCase 表示加引号的标识符是否区分大小写。
StatementSeparatorPattern 字符串 匹配语句分隔符的正则表达式。
StringLiteralPattern 字符串 匹配字符串文本并且包含文本本身的匹配值的正则表达式。 例如,如果数据源使用单引号来标识字符串,则为:“('([^']|'')*')"'
SupportedJoinOperators SupportedJoinOperators 指定数据源支持的 SQL join 语句类型。

数据类型

此架构集合公开有关 .NET Framework 托管提供程序当前连接到的数据库支持的数据类型的信息。

ColumnName 数据类型 DESCRIPTION
类型名称 字符串 提供程序特定的数据类型名称。
ProviderDbType 整数 (int) 指定参数类型时应使用的提供程序特定的类型值。 例如,SqlDbType.Money 或 OracleType.Blob。
ColumnSize 长整型 非数值列或参数的长度是指提供程序为此类型定义的最大值或长度。

对于字符数据,这是由数据源定义单位的最大或指定长度。 Oracle 的概念是指定长度,然后指定某些字符数据类型的实际存储大小。 这仅定义 Oracle 的长度(以单位为单位)。

对于日期时间数据类型,这是字符串表示形式的长度(假设允许的小数秒分量的最大精度)。

如果数据类型为数值,则这是数据类型的最大精度上限。
CreateFormat 字符串 格式化字符串,表示如何将此列添加到数据定义语句中,例如 CREATE TABLE。 CreateParameter 数组中的每个元素都应以格式字符串中的“参数标记”表示。

例如,SQL 数据类型 DECIMAL 需要精度和小数位数。 在这种情况下,格式字符串将为“DECIMAL({0},{1})”。
创建参数 字符串 创建此数据类型的列时必须指定的创建参数。 每个创建参数都列在字符串中,以逗号分隔它们要提供的顺序。

例如,SQL 数据类型 DECIMAL 需要精度和小数位数。 在此情况下,创建参数应包含字符串“精度, 小数位数”。

在文本命令中创建精度为 10 且小数位数为 2 的 DECIMAL 列时,CreateFormat 列的值可能为 DECIMAL({0},{1}),完整类型规范为 DECIMAL(10,2)。
数据类型 字符串 数据类型的 .NET Framework 类型的名称。
IsAutoincrementable 布尔 true - 此数据类型的值可能自动递增。

false - 此数据类型的值可能不会自动递增。

请注意,这仅指示此数据类型的列是否可能自动递增,而不是此类型的所有列都是自动递增的。
IsBestMatch 布尔 true - 数据类型是数据存储中的所有数据类型与 DataType 列中值指示的 .NET Framework 数据类型之间的最佳匹配。

false — 数据类型不是最佳匹配。

对于 DataType 列值相同的行的每一组,IsBestMatch 列只在一个行中设置为 true。
IsCaseSensitive 布尔 true - 数据类型是字符类型,区分大小写。

false - 数据类型不是字符类型或不区分大小写。
IsFixedLength 布尔 true - 由数据定义语言 (DDL) 创建的此数据类型的列的长度为固定长度。

false - 由 DDL 创建的此数据类型的列长度将可变。

DBNull.Value - 目前还不清楚提供程序是将此字段映射到固定长度还是可变长度列。
IsFixedPrecisionScale 布尔 true - 数据类型具有固定精度和比例。

false — 数据类型没有固定的精度和小数位数。
IsLong 布尔 true - 数据类型包含非常长的数据。对非常长的数据的定义是特定于提供程序的。

false - 数据类型不包含很长的数据。
IsNullable 布尔 true — 数据类型可为空。

false — 数据类型不可为空。

DBNull.Value - 不确定数据类型是否可为空。
IsSearchable 布尔 true:数据类型可以在 WHERE 子句中与除 LIKE 谓词之外的任何运算符一起使用。

false - 数据类型不能用于包含除 LIKE 谓词以外的任何运算符的 WHERE 子句中。
IsSearchableWithLike 布尔 true - 数据类型可与 LIKE 谓词一起使用

false - 数据类型不能与 LIKE 谓词一起使用。
IsUnsigned 布尔 true — 数据类型无符号。

false - 数据类型已签名。

DBNull.Value - 不适用于数据类型。
MaximumScale 如果类型指示器是数值类型,则这是小数点右侧允许的最大位数。 否则为 DBNull.Value。
MinimumScale 如果类型指示器是数值类型,则这是小数点右侧允许的最小位数。 否则为 DBNull.Value。
IsConcurrencyType 布尔 true – 每次更改行时数据库都会更新数据类型,并且列的值与以前的所有值不同

false – 每次行更改时,数据库不更新数据类型。

DBNull.Value – 数据库不支持这种类型的数据类型
IsLiteralSupported 布尔 true – 数据类型可以以文本形式表示。

false – 数据类型不能以文本形式表示。
LiteralPrefix 字符串 应用于给定文本的前缀。
LiteralSuffix 字符串 应用于给定文本的后缀。
NativeDataType 字符串 NativeDataType 是 OLE DB 专用的列,用于揭示数据类型的 OLE DB 类型。

限制

此架构集合为当前用于连接到数据库的 .NET Framework 管理的提供程序公开所支持的限制的有关信息。

ColumnName 数据类型 DESCRIPTION
集合名称 字符串 应用这些限制的集合的名称。
RestrictionName 字符串 集合中的限制的名称。
RestrictionDefault 字符串 忽视。
RestrictionNumber 整数 (int) 此特定限制在限制集合中的实际位置。

保留字

此架构集合为 .NET Framework 管理的提供程序当前连接到的数据库公开所保留的关键字的有关信息。

ColumnName 数据类型 DESCRIPTION
ReservedWord 字符串 提供程序特定的保留字。

另请参阅