添加记录以从 C# 访问数据库

Posted

技术标签:

【中文标题】添加记录以从 C# 访问数据库【英文标题】:Adding a record to access database from C# 【发布时间】:2013-10-06 17:01:17 【问题描述】:

我有一个 C# 中的 Form Windows 程序,它向数据库中添加一条记录并可以删除它。

在数据库中,我有 ID(即自动编号),但如果我删除了一条记录,而我想添加另一条记录,则自动编号会增加并且不会添加缺失的数字。

我的意思是,如果我的 Access 数据库中有 9 条记录并且我想删除一条记录,它将是 8 条,但是当我添加一条新记录时,我得到 10 条而不是 9 条。就像这张图片:

有什么解决办法吗?

【问题讨论】:

答案是否定的。使用自动增量时,您必须接受它的工作方式。否则,您必须实现自己的自动递增。 顺便说一句,它以这种方式工作的原因是为了获得最高性能。如果它按您想要的方式工作,我们需要一个更复杂的算法来找到下一个身份,而不是仅仅增加最后使用的值。 【参考方案1】:

如果是自动编号,数据库将生成一个大于上次使用的编号 - 这就是关系数据库的工作方式。为什么会有解决方案?想象一下删除 5,那么你想做什么,让自动编号创建下一条记录为 5?如果您在 C# 应用程序中显示 id - 坏主意 - 然后将其更改为您可以根据需要控制的其他值。

但是你想要达到的目标没有意义。

【讨论】:

【参考方案2】:

如果我删除了一条记录,而我想添加另一条记录,则自动编号会增加并且不会添加缺失的编号。

[...]

有什么解决办法吗?

简短的回答是“不”。一旦使用,自动编号值通常不会重复使用,即使删除的记录在表中具有最大的自动编号值。这是因为(至少部分地)Jet/Ace 数据库引擎必须能够在多用户环境中管理自动编号值。

(上述规则的一个例外是,如果 Access 数据库被压缩,则具有顺序自动编号字段的表的下一个可用自动编号值将重置为 Max(current_value)+1。)

有关自动编号字段如何工作的更多详细信息,请参阅我的另一个答案 here。

【讨论】:

【参考方案3】:

在 MS 访问中,没有任何解决方案。但在 sql server 的情况下,您可以创建自己的函数,而不是使用 Identity 列。

【讨论】:

以上是关于添加记录以从 C# 访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 数据映射到 xml 以从 azure 函数 c# 调用 webservice

如何编写 SQL 查询以从表中提取 50% 的记录?

如何使用 C# 自动化从访问数据库(.accdb)中读取所有记录

更新查询以从 Microsoft 访问数据库中读取

如何转换 JavaScript 对象以从 C++ 访问其数据?

我在 C# 中写入啥来编辑访问数据库中的数据