0

我过去做过一些数据库方面的工作,包括 SQL(虽然我不知道它们是哪些变体);在其中一个中,我确定有一个“occnum”关键字或类似关键字,它允许表中没有唯一字段的行通过索引来寻址?

在我目前的情况下,几年后和完全不同的工作场所,我面临着编写一个允许编辑公司特定 Access 数据库的 C# 应用程序。这个数据库缺少主键,所以我试图找到一个类似的“出现次数”功能来编辑特定的行,但没有找到任何东西。更改数据库结构不是一种选择,并且没有一个字段是唯一的。

例如,我使用 OleDbDataAdapter 来查询一些行,如下所示:

        List<string> result = new List<string>();

        DataSet dataSet = new DataSet();
        OleDbDataAdapter oleDBA = new OleDbDataAdapter(new OleDbCommand("SELECT " + FIELDNAME_ITEMDATA_TAG + " FROM " + TABLENAME_ITEMDATA + " WHERE " + FIELDNAME_ITEMDATA_AREANUMBER + " = " + Area.ToString(), oleDbConnection));
        oleDBA.Fill(dataSet, "ResourceString");

        foreach (DataRow dr in dataSet.Tables[0].Rows)
        {
            result.Add(dr.ItemArray[0].ToString());
        }

然后使用字符串列表填充 ListBox。当列表框中的条目被填充时,我希望能够通过它的出现次数来查询单个行,例如:

"SELECT " + FIELDNAME_ITEMDATA_TAG + " FROM " + TABLENAME_ITEMDATA + " WHERE " + FIELDNAME_ITEMDATA_AREANUMBER + " = " + Area.ToString(), oleDbConnection AND OCCNUM = " + OccNum

这是可行的吗?我只是没有找到正确的关键字吗?

4

1 回答 1

0

occnum是 Oracle 数据库功能,无法通过 Access 访问。

也就是说,IIRC,Access 没有任何内置主键的概念(这确实是您想要的)。你将不得不自己添加它。

也就是说,您应该向您的表添加一个主键,然后在例程中选择主键和标签名称(如果您正在生成查询,您可以在所有表​​中将主键命名为相同 -像上面那样飞行),然后在您想要获取更多信息时通过主键查询。

你还应该弄清楚每个表的自然键是什么,并确保你有一个唯一的索引(或者,如果你愿意,你可以将该列作为主键,但我建议不要这样做) .

最后,如果您创建一个作为代理键的主键,那么您可以将其设为自动递增列,这样您就不必担心在插入新值时生成键。

于 2012-09-26T16:03:28.480 回答