常用架构集合

适用于:.NET Framework .NET .NET Standard

下载 ADO.NET

常见架构集合是由每个 .NET 托管提供程序实现的架构集合。 可调用没有参数或包含架构集合名称“MetaDataCollections”的 GetSchema 方法来查询由 .NET 管理的提供程序,从而确定支持的架构集合列表。 此方法将返回一个 DataTable,其中有一个列表显示了受支持的架构集合、每个集合支持的限制数,以及它们使用的标识符部分的数目。 这些集合描述所有必需的列。 如果需要,可随意使用提供程序添加更多的列。 例如,用于 SQL Server 的 Microsoft SqlClient 数据提供程序将 ParameterName 添加到限制集合中。

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

若要详细了解如何使用 GetSchema 方法,请参阅 GetSchema 和架构集合

MetaDataCollections

此集合公开当前用于连接到数据库的提供程序所支持的所有架构集合的相关信息。

ColumnName 数据类型 说明
CollectionName string 为返回集合传递给 GetSchema 方法的集合名称。
NumberOfRestrictions int 可以为集合指定的限制数。
NumberOfIdentifierParts int 复合标识符/数据库对象名称中的部分数。 例如,在 SQL Server 中,表的值为 3,列的值为 4。

DataSourceInformation

此集合公开用于 SQL Server 的 Microsoft SqlClient 数据提供程序当前连接到的数据源的相关信息。

ColumnName 数据类型 说明
CompositeIdentifierSeparatorPattern string 匹配复合标识符中的复合分隔符的正则表达式。 例如 \.(针对 SQL Server)。

通常对数据库对象名使用复合标识符,例如 pubs.dbo.authorspubs@dbo.authors

对于 SQL Server,使用正则表达式 \.
DataSourceProductName string 提供程序访问的产品的名称,如“SQLServer”。
DataSourceProductVersion string 指示提供程序访问的产品版本,采用数据源本机格式,而不是 Microsoft 格式。

在某些情况下,DataSourceProductVersionDataSourceProductVersionNormalized 将是相同的值。
DataSourceProductVersionNormalized string 数据源的标准化版本,以便可以使用 String.Compare() 进行比较。 此格式对于各版本的提供程序都是一致的,以防止版本 10 在版本 1 和版本 2 之间进行排序。

例如,SQL Server 使用典型的 Microsoft nn.nn.nnnn 格式。

在某些情况下,DataSourceProductVersionDataSourceProductVersionNormalized 将是相同的值。
GroupByBehavior GroupByBehavior 指定 GROUP BY 子句中的列与选择列表中的非聚合列之间的关系。
IdentifierPattern string 匹配标识符并且包含标识符的匹配值的正则表达式。 例如,[A-Za-z0-9_#$]
IdentifierCase IdentifierCase 表示未加引号的标识符是否区分大小写。
OrderByColumnsInSelect bool 指定 ORDER BY 子句中的列是否必须在选择列表中。 如果值为 true,则指示它们必须在选择列表中。 如果值为 false,则指示它们不需要在选择列表中。
ParameterMarkerFormat string 表示如何格式化参数的格式化字符串。

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

例如,如果数据源期望参数被命名且以 : 为前缀,则此字符串将为 :{0}。 在使用名称 p1 格式化此参数时,生成的字符串为 :p1

如果数据源期望参数以 @ 为前缀,但是名称中已包含该符号,则此字符串将为 {0},格式化名为 @p1 的参数的结果将为 @p1

如果数据源不期望使用命名参数,而期望使用 ? 字符,则格式字符串可指定为 ?,这样将忽略参数名称。
ParameterMarkerPattern string 匹配参数标记的正则表达式。 该表达式将包含参数名的匹配值(如果有)。

例如,如果受支持的命名参数具有将包括在参数名称中的 @ 引导字符,则此模式将为 (\@[A-Za-z0-9_$#]*)

但是,如果受支持的命名参数以 : 作为引导字符,并且该字符并非参数名称的一部分,则此模式为 :([A-Za-z0-9_$#]\*)

如果数据源不支持命名参数,则此模式为 ?
ParameterNameMaxLength int 参数名的最大长度(字符数)。 Visual Studio 期望如果支持参数名,最大长度的最小值为 30 个字符。

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

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

DataTypes

此架构集合公开提供程序当前连接到的数据库公开所支持的数据类型的相关信息。

ColumnName 数据类型 说明
TypeName string 提供程序特定的数据类型名称。
ProviderDbType int 指定参数类型时应使用的提供程序特定的类型值。 例如,SqlDbType.Money
ColumnSize long 非数值列或参数的长度。 此值是指提供程序为此类型定义的最大值或长度。

对于字符数据,此值是数据源定义的最大值或长度(以单位表示)。

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

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

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

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

在创建精度为 10、小数位数为 2 的 DECIMAL 列的文本命令中,CreateFormat 列的值可能为 DECIMAL({0},{1}),完整的类型说明将为 DECIMAL(10,2)
数据类型 string 数据类型为 .NET 类型的名称。
IsAutoincrementable bool true - 此数据类型的值可能会自动递增。

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

此属性仅指示此数据类型的列是否可自动递增,不指示此类型的所有列都自动递增。
IsBestMatch bool true - 数据类型是数据存储中所有数据类型与 DataType 列中的值指示的 .NET 数据类型之间的最佳匹配。

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

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

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

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

DBNull.Value - 不知道提供程序将使用固定长度列还是可变长度列映射此字段。
IsFixedPrecisionScale bool true - 数据类型具有固定精度和小数位数。

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

false - 数据类型不包含非常长的数据。
IsNullable bool true - 数据类型可为空。

false - 数据类型不可为空。

DBNull.Value - 不知道数据类型是否可为空。
IsSearchable bool true - 数据类型可与 LIKE 谓词之外的任何运算符一起在 WHERE 子句使用。

false - 数据类型不可与 LIKE 谓词之外的任何运算符一起在 WHERE 子句使用。
IsSearchableWithLike bool true - 数据类型可与 LIKE 谓词一起使用。

false - 数据类型不可与 LIKE 谓词一起使用。
IsUnsigned bool true - 数据类型为无符号。

false - 数据类型为有符号。

DBNull.Value - 不适用于数据类型。
MaximumScale short 如果类型指示符为数值类型,则此值为小数点右边允许的最大位数。 否则,此值为 DBNull.Value
MinimumScale short 如果类型指示符为数值类型,则此值为小数点右边允许的最小位数。 否则,此值为 DBNull.Value
IsConcurrencyType bool true - 每次更改行,并且列的值与之前所有的值都不同时,数据库都会更新数据类型。

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

DBNull.Value - 数据库不支持此数据类型。
IsLiteralSupported bool true - 数据类型可表示为文本。

false - 数据类型不可表示为文本。
LiteralPrefix string 应用于给定文本的前缀。
LiteralSuffix string 应用于给定文本的后缀。

限制

此架构集合公开了当前用于连接到数据库的提供程序所支持的限制的相关信息。

ColumnName 数据类型 说明
CollectionName string 应用这些限制的集合的名称。
RestrictionName string 集合中的限制的名称。
RestrictionDefault string 已忽略。
RestrictionNumber int 此特定限制在限制集合中的实际位置。

ReservedWords

此架构集合公开提供程序当前连接到的数据库公开所保留的关键字的相关信息。

ColumnName 数据类型 说明
ReservedWord string 提供程序特定的保留字。

另请参阅