从 access 97 数据库中获取表/模式

Posted

技术标签:

【中文标题】从 access 97 数据库中获取表/模式【英文标题】:Get tables/schema from access 97 database 【发布时间】:2017-12-14 23:26:06 【问题描述】:

我有一个 Access 97 数据库,我试图从中获取数据架构和数据。我不知道有多少个表,不知道它们叫什么,也不知道有什么列名。

我以编程方式进入数据库没有问题,但是您如何发现架构?

我正在使用它来获取架构表:

static DataTable GetSchemaTable(string connectionString)

    using (OleDbConnection connection = new OleDbConnection(connectionString))
    
        connection.Open();
        DataTable schemaTable =
            connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
            new object[]  null, null, null, "TABLE" );
        return schemaTable;
    

【问题讨论】:

【参考方案1】:

GetOleDbSchemaTableOleDbSchemaGuid.Tables 字段返回目录中定义的表(包括视图名称),而对象数组引用此构造:

new object  "table_catalog", "table_schema", "table_name", "table_type" 

OleDbSchemaGuid 由 3 个字段组成:OleDbSchemaGuid.TablesOleDbSchemaGuid.ColumnsOleDbSchemaGuid.Primary_Keys。要获取表格属性,可以使用OleDbSchemaGuid.Columns 字段:

connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
        new object[]  "table_catalog", "table_schema", "table_name", "column_name" );

由于您要查找表架构,因此设置第二个参数并将另一个参数保留为空值:

var columns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
        new object[]  null, "schema_name", null, null );

如果您想同时通过表模式和表名获取属性,也可以使用第三个参数:

var columns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
        new object[]  null, "schema_name", "table_name", null );

【讨论】:

【参考方案2】:

你的方向是好的 对于每个表,您可以再次调用 GetOleDbSchemaTable,但在这种情况下,使用不同的参数:

    DataTable schemaColumns =
        connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
        new object[]  null, "MyTableName", null, null );

通过OleDbSchemaGuid,您可以指定检索哪个架构,并使用过滤器指定表架构

在this link,您可以找到有关如何过滤的信息,例如通过表名检索列信息。限制是一个数组,你应该把过滤器值放在它对应的位置

【讨论】:

以上是关于从 access 97 数据库中获取表/模式的主要内容,如果未能解决你的问题,请参考以下文章

Access DAO 为 Access 97 文件引发 COMException

避免在调试模式 Access 97 时因错误而停止

访问 97 个数据库

Access 数据库需要从另一个表中获取最近日期的记录

使用带有日期的 C# 在 MS Access 97 数据库中清除查询

从 Access 中的另一个表中获取输入