возвращена недостоверная информация - PullRequest
0 голосов
/ 26 марта 2019

Я пишу программу обновления для перемещения файлов Access 2.0 .mdb в Access 2003 .mdb.Мы придерживаемся файловой структуры mdb по нескольким причинам, поскольку этот код находится в нескольких местах расположения клиентов, а mdb позволяет нам использовать существующий код.

Основная проблема:

Я иду через JET, чтобы прочитать таблицы из файла .mdb и прочитать каждую таблицу в виде данных на C #.Затем я делаю несколько проверок и дублирую таблицу в базе данных mdb 2003 года.Я использую функцию DataTable.PrimaryKey для сбора столбцов, которые являются столбцами первичного ключа, но я не получаю надежных результатов.

Access 2.0 показывает PrimaryKey в нескольких таблицах (один столбец), где DataTable нет, но не всегда.

Я подтвердил, что я получаю PrimaryKey (s) в некоторых таблицах, простоне все.

DataColumn[] dcPrimaryKeyCols = OrgTbl.PrimaryKey;
            //Read the Ordinal so we can order the columns correctly
            for (int m = 0; m < NumCols; m++)
            {
                ColumnOrder[m] = OrgTbl.Columns[m].Ordinal;
                if (ColumnOrder[m] != m)
                    MessageBox.Show("In table " + nm+ "out of order ordinal on column: " + OrgTbl.Columns[m].ColumnName);
            }
            lblStatus.Text = "Creating Table";
            pbTableProgress.Value = 0;
            pbTableProgress.Maximum = NumCols;
            for (int col = 0; col < NumCols;col++ )
            {
                pbTableProgress.Value = col;
                Application.DoEvents();
                sColNm=OrgTbl.Columns[col].ColumnName.Trim();
                bPrimaryKey = false;
                //determine if this column is part of a primary key group
                for (int k = 0; k < dcPrimaryKeyCols.Length;k++ )
                {
                    if (dcPrimaryKeyCols[k].ColumnName.Trim().Equals(sColNm))
                    {
                        bPrimaryKey = true;
                        break;
                    }
                }

Я установил точку останова в строке bPrimaryKey = true, и она иногда достигается, но не во всех таблицах, где определен первичный ключ.

Одна вещьЯ отметил, что в Access Ver 2.0 информация о столбцах для некоторых первичных ключей показывает: required = no, unique = no.Я не знаю, приводит ли это к тому, что JET или таблица данных C # могут пометить столбец primarykey или другие вещи работают здесь.Но в результате я не могу правильно определить ВСЕ столбцы первичного ключа.

...