我有一个 C# 中的窗体 Windows 程序,它向数据库添加一条记录并可以删除它。
在数据库中,我有 ID(即自动编号),但如果我删除一条记录,并且如果我想添加另一条记录,则自动编号会增加并且不会添加缺失的数字。
我的意思是,如果我的 Access 数据库中有 9 条记录并且我想删除一条记录,它将是 8 条,但是当我添加一条新记录时,我得到 10 条而不是 9 条。就像这张图片:
有什么解决办法吗?
如果它是一个自动编号,数据库将生成一个大于上次使用的数字 - 这就是关系数据库的工作方式。为什么会有解决方案?想象一下删除 5,那么你想做什么,让自动编号创建下一条记录为 5?如果您在 C# 应用程序中显示 id - 坏主意 - 然后将其更改为您可以根据需要控制的其他值。
但是,您要实现的目标没有意义。
如果我删除了一条记录,而我想添加另一条记录,则自动编号会增加并且不会添加缺失的编号。
[...]
有什么解决办法吗?
最简洁的答案是不”。一旦使用,自动编号值通常不会被重新使用,即使删除的记录在表中具有最大的自动编号值。这是因为(至少部分地)Jet/Ace 数据库引擎必须能够在多用户环境中管理自动编号值。
(上述规则的一个例外是,如果 Access 数据库被压缩,则具有顺序自动编号字段的表的下一个可用自动编号值将重置为 Max(current_value)+1。)
有关自动编号字段如何工作的更多详细信息,请在此处查看我的其他答案。
在 MS 访问中,对此没有任何解决方案。但在 sql server 的情况下,您可以创建自己的函数,而不是使用 Identity 列。