返回了不可靠的信息

时间:2019-03-26 15:29:20

标签: c# ms-access datatable primary-key

我正在编写一个用于将Access 2.0 .mdb文件移动到Access 2003 .mdb的升级程序。我们之所以使用mdb文件结构,有几个原因,因为这是位于多个客户位置的代码,而mdb允许我们利用现有代码。

主要问题:

我通过JET从file.mdb中读取表并将每个表读取到C#数据表中。然后,我进行了几次检查,并在2003 mdb db中复制了该表。我使用DataTable.PrimaryKey函数来收集作为主键列的列,但是没有得到可靠的结果。

Access 2.0在多个表(单列)中显示了PrimaryKey,而DataTable却不是,但并非总是如此。

我已验证我确实在某些表上获得了PrimaryKey,但不是全部。

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 = nounique = no。我不知道这是否导致JET或C#数据表取消标记主键列,或者其他是否在起作用。但是最终结果是我无法正确检测所有主键列。

0 个答案:

没有答案