首页 > 解决方案 > 自动递增主键值始终为 0

问题描述

我试图使用下面的代码向数据库添加一个新行。

即使Rundef表有一个应该自动递增的主键,它的值总是为零。为什么会这样?

Private oRunDefDS As DataSet
Dim oDR As DataRow = oRunDefDS.Tables("RunDef").NewRow()

表的设计Rundef

在此处输入图像描述

标签: sqlsql-servervb.netoledb

解决方案


当您在代码中创建新行时,它尚未插入到数据库中。这意味着数据库引擎没有分配它的增量 ID,而是给它一个默认值 0。

将记录插入数据库,id 应该会自动更新,尽管您可能需要重新读取该行以取回数据,具体取决于您正在使用的数据访问。

如果不是这种情况,那么您的代码可以创建许多仅供内部使用的新行,但需要对所使用的 ID 进行保留。如果您从未将这些新行保存到数据库中,您最终会在增量 ID 中出现很多空白。


推荐阅读