OleDbConnection.GetOleDbSchemaTable

在 .NET Framework 2.0 中,要得到表结构的定义,不能简单的用 DataTable.Columns[col].DataType 来获取,有很多信息是无法得到的,要用OleDbConnection.GetOleDbSchemaTable 这个方法。

在 MSDN 中是这么定义的:

public DataTable GetOleDbSchemaTable(
    Guid schema,
    Object[] restrictions
)

参数:
schema
类型:System.Guid
OleDbSchemaGuid 的值之一,它指定要返回的架构表。

restrictions
类型:array[]()[]
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。

返回值
类型:System.Data..::.DataTable
一个包含所请求的架构信息的 DataTable。

我要得到一个表的结构,可以这样:

DataTable dtSchema = db.GetOleDbSchemaTable(
    OleDbSchemaGuid.Columns,
    new object[] { null, null, TableName, null });

返回的 dtSchema 的列分别是:

0: TABLE_CATALOG
1: TABLE_SCHEMA
2: TABLE_NAME
3: COLUMN_NAME
4: COLUMN_GUID
5: COLUMN_PROPID
6: ORDINAL_POSITION
7: ORDINAL_HASDEFAULT
8: ORDINAL_DEFAULT
9: ORDINAL_FLAGS
10: IS_NULLABLE
11: DATA_TYPE
12: TYPE_GUID
13: CHARACTER_MAXIMUM_LENGTH
14: CHARACTER_OCTET_LENGTH
15: NUMERIC_PRECISION
16: NUMERIC_SCALE
17: DATETIME_PRECISION
18: CHARACTER_SET_CATALOG
19: CHARACTER_SET_SCHEMA
20: CHARACTER_SET_NAME
21: COLLATION_CATALOG
22: COLLATION_SCHEMA
23: COLLATION_NAME
24: DOMAIN_CATALOG
25: DOMAIN_SCHEMA
26: DOMAIN_NAME
27: DOMAIN_DESCRIPTION