添加记录以从 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
如何使用 C# 自动化从访问数据库(.accdb)中读取所有记录