以前觉得C#获取Access数据库表名是件挺麻烦的事,要通过ADOX和ADODB技术,最近才发现原来OleDb本身就有这个功能,真是学业不精令人汗颜啊。下面是MSDN上面介绍的该方法:
--------------------------------------------------------------------------------------------------------
OleDbConnection.GetOleDbSchemaTable 方法
应用了指定的限制之后,按照 GUID 的指示从数据源返回架构信息。
命名空间:System.Data.OleDb
程序集:System.Data(在 system.data.dll 中)
public DataTable GetOleDbSchemaTable (
Guid schema,
Object[] restrictions
)
OleDbSchemaGuid 的值之一,它指定要返回的架构表。
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。
一个包含所请求的架构信息的 DataTable。
--------------------------------------------------------------------------------------------------------
Tables 映射到 OLE DB TABLES 行集合。除非另外指定,否则将按下列顺序返回限制列。
限制列 |
CLR 数据类型 |
说明 |
---|---|---|
TABLE_CATALOG |
string |
目录名称。如果提供程序不支持目录,则为空值。 |
TABLE_SCHEMA |
string |
非限定的架构名称。如果提供程序不支持架构,则为空值。 |
TABLE_NAME |
string |
表名称。返回的列不能包含空值。 |
TABLE_TYPE |
string |
表类型。以下之一或提供程序特定的值:“ALIAS”、“TABLE”、“SYNONYM”、“SYSTEM TABLE”、“VIEW”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”或“SYSTEM VIEW”。返回的列不能包含空值。 |
--------------------------------------------------------------------------------------------------------
一般我们要获取的是用户表,那就设置object[]第四个值为“TABLE”,具体如下:
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
此外,GetOleDbSchemaTable函数还可以获取列名,视图等多种数据库架构信息,具体使用方法请参考MSDN
---------------------------------------------------------------------------------------------------------
今天又看了看MSDN,又找出了一个函数干这活
从数据库获取架构信息通过架构发现过程来完成。通过架构发现,应用程序可以请求托管提供程序查找并返回有关给定数据库的数据库架构(也称为元数据)名称的信息。不同的数据库架构元素(例如表、列和存储过程)通过架构集合进行公开。每个架构集合包含所使用的提供程序特定的各种架构信息。
每个 .NET Framework 托管提供程序实现 Connection 类中的 GetSchema 方法,从 GetSchema 方法返回的架构信息采用 DataTable 的形式。GetSchema 方法属于重载方法,提供可选的参数来指定要返回的架构集合以及限制返回的信息量。
除了 GetSchema 方法之外,OLE DB .NET Framework 数据提供程序还使用 OleDbConnection 对象的 GetOleDbSchemaTable 方法来公开架构信息。GetOleDbSchemaTable 将 OleDbSchemaGuid(标识要返回的架构信息)和所返回列上的约束数组用作参数。GetOleDbSchemaTable 返回已填充所请求架构信息的 DataTable。
C# |
---|
public virtual DataTable GetSchema () |
示例:和GetOleDbSchemaTable()差不多
DataTable table = connection.GetSchema("Tables");
可以替换“Table”的还有如下字段,来源网上(http://topic.csdn.net/u/20080918/12/fc76f127-87bc-46e4-b273-7da1ca514c2c.html),请自行验证。
MetaDataCollections
DataSourceInformation
DataTypes
Restrictions
ReservedWords
Users
Databases
Tables
Columns
StructuredTypeMembers
Views
ViewColumns
ProcedureParameters
Procedures
ForeignKeys
IndexColumns
Indexes
UserDefinedTypes
补充参考数据:
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = MSysAccessObjects
TABLE_TYPE = ACCESS TABLE
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2003-12-30 21:51:00
DATE_MODIFIED = 2003-12-30 21:51:00
============================
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = MSysACEs
TABLE_TYPE = SYSTEM TABLE
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2003-12-30 21:51:00
DATE_MODIFIED = 2003-12-30 21:51:00
============================
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = MSysObjects
TABLE_TYPE = SYSTEM TABLE
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2003-12-30 21:51:00
DATE_MODIFIED = 2003-12-30 21:51:00
============================
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = MSysQueries
TABLE_TYPE = SYSTEM TABLE
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2003-12-30 21:51:00
DATE_MODIFIED = 2003-12-30 21:51:00
============================
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = MSysRelationships
TABLE_TYPE = SYSTEM TABLE
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2003-12-30 21:51:00
DATE_MODIFIED = 2003-12-30 21:51:00
============================
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = 查询1
TABLE_TYPE = VIEW
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2009-03-18 11:49:39
DATE_MODIFIED = 2009-03-18 11:49:39
============================
TABLE_CATALOG =
TABLE_SCHEMA =
TABLE_NAME = 原始结果
TABLE_TYPE = TABLE
TABLE_GUID =
DESCRIPTION =
TABLE_PROPID =
DATE_CREATED = 2009-02-17 14:48:11
DATE_MODIFIED = 2009-03-18 11:49:39
============================
Press any key to continue.