Получить все таблицы в базе данных Access по порядковому номеру - PullRequest
3 голосов
/ 29 ноября 2011

Я пишу в C # для базы данных Access ...

Я могу получить все таблицы в моей базе данных доступа со следующими данными:

DataTable dataTbl;
DataView dvCols;
DataRowView drvCols;

...

dataTbl = m_connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
    new Object[] { null, null, null, "TABLE" });
dvCols = new DataView(dataTbl);

for (int j = 0; j < dvCols.Count; j++)
{
    drvCols = dvCols[j];
    tableName = drvCols.Row["TABLE_NAME"].ToString();
    // ...
}

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

dvCols.Sort = "ORDINAL_POSITION";

Однако с таблицами это невозможно, на самом деле я не думаю, что это порядковый номер.Мои таблицы имеют отношения, например, таблица A имеет отношение один ко многим с таблицей B, которая имеет отношение один ко многим с таблицей C и т. Д. Итак, мне нужно получить имена таблиц в таком порядке, например, A, затем B, затем C.

Есть ли способ сделать это?
Нужно ли мне как-то исследовать первичные и внешние ключи и выяснить эту информацию самостоятельно?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Хорошо .. настроил это. В итоге я сделал следующее:

               dataTable_ForeignKeys = 
                m_connection.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, null);

                //Check if a DataTable object is initialized
                if (dataTable_ForeignKeys != null)
                {
                    // iterate and get the names
                    foreach (DataRow row in dataTable_ForeignKeys.Rows)
                    {
                        tableName = row["PK_TABLE_NAME"].ToString();
                        tblNames.Add(tableName);

Чтобы получить список отношений внешнего ключа. Это вернуло таблицы в нужном мне порядке, то есть сначала «родительские» таблицы. Если таблица не является «родителем» другой таблицы, т. Е. У нее нет поля, являющегося внешним ключом в другой таблице, то она не будет возвращена. Я согласовал это, также получив все имена таблиц базы данных, как я делал в своем первоначальном сообщении.

0 голосов
/ 30 ноября 2011

Если вы хотите, чтобы таблицы были упорядочены в соответствии с их взаимоотношениями, то да, вам придется реализовать это самостоятельно (или найти сторонний инструмент; я ничего не знаю).

Примечаниечто вам понадобится некоторая стратегия для обработки циклов в отношениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...