自动递增主键值始终为 0
Posted
技术标签:
【中文标题】自动递增主键值始终为 0【英文标题】:Auto increment primary key value is always 0 【发布时间】:2018-08-09 09:37:01 【问题描述】:我正在尝试使用以下代码向数据库添加新行。
尽管Rundef
表有一个应该自动递增的主键,但它的值始终为零。为什么会这样?
Private oRunDefDS As DataSet
Dim oDR As DataRow = oRunDefDS.Tables("RunDef").NewRow()
Rundef
表的设计:
【问题讨论】:
您能展示一下您的特定桌子的设计吗?自动增量(SQL Server 中的标识)设置不正确是合理的。 @DKyleo 我已经更新了这个问题。希望它有所帮助 好的,在Column Properties中打开你的RunID列的Identity Specification,查看是列为Yes还是No。 除非您插入了默认值或绑定 0,否则您的身份密钥应该可以工作。 您是在将记录保存到数据库之前还是之后查看 RunID? 【参考方案1】:当您在代码中创建一个新行时,它还没有被插入到数据库中。这意味着数据库引擎没有分配它的增量 ID,而是给它一个默认值 0。
将记录插入数据库,id 应该会自动更新,但您可能需要重新读取该行以取回数据,具体取决于您使用的数据访问权限。
如果不是这种情况,那么您的代码可以创建许多仅供内部使用的新行,但需要对所使用的 ID 进行保留。如果您从未将这些新行保存到数据库中,您最终会在增量 ID 中出现很多空白。
【讨论】:
您的意思可能是inserted
。 Commit
在谈论数据库时总是指事务
我认为 NewRow() 应该自己初始化 Id 字段吧?
正确,但 NewRow 对象仅在内存中,不在数据库中。只有在保存时才会应用增量 ID。
@MuhammedThabjeel 不,这只是 DataTable 的行构造函数,它可能与数据库没有任何关系*。标识值由数据库生成,而不是代码
@MuhammedThabjeel 绝对不是。也许有一些自定义代码会在插入之前修改内容。或者,当您有具有关系的数据表时,使用 负 值,为相关记录提供临时 ID。将数据集保存到数据库时,这些值将替换为真实值以上是关于自动递增主键值始终为 0的主要内容,如果未能解决你的问题,请参考以下文章