Получить таблицы / схемы из базы данных Access 97

У меня есть база данных 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;
    }
}

2 ответа

Решение

GetOleDbSchemaTable с OleDbSchemaGuid.Tables поле возвращает таблицы (включая имена представлений), определенные внутри каталога, а массив объектов ссылается на эту конструкцию:

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

OleDbSchemaGuid состоит из 3 полей: OleDbSchemaGuid.Tables, OleDbSchemaGuid.Columns а также OleDbSchemaGuid.Primary_Keys, Чтобы получить свойства таблицы, вы можете использовать OleDbSchemaGuid.Columns поле:

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

Поскольку вы хотите найти схему таблицы, установите второй аргумент и оставьте другие аргументы в качестве значения NULL:

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 });

Вы находитесь в правильном направлении. Для каждой таблицы вы можете снова вызвать GetOleDbSchemaTable, но в этом случае с другими параметрами:

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

С помощью OleDbSchemaGuid вы можете указать, какую схему извлекать, а с помощью фильтров указать схему таблицы.

В этой ссылке вы можете найти информацию о том, как фильтровать, например, по имени таблицы, чтобы получить информацию о столбцах. Ограничения - это массив, и вы должны поместить значение фильтра в соответствующее положение.

Другие вопросы по тегам