Sql 自动递增主键值始终为0

Sql 自动递增主键值始终为0,sql,sql-server,vb.net,oledb,Sql,Sql Server,Vb.net,Oledb,我试图使用下面的代码向数据库中添加新行 即使Rundef表的主键应该自动递增,它的值始终为零。为什么会发生这种情况 Private oRunDefDS As DataSet Dim oDR As DataRow = oRunDefDS.Tables("RunDef").NewRow() Rundef表的设计: 在代码中创建新行时,该行尚未插入到数据库中。这意味着数据库引擎没有分配其增量ID,而是将其默认值设置为0 将记录插入数据库,id应该会自动更新,不过您可能需要重新读取该行以取回数据,具体

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

即使
Rundef
表的主键应该自动递增,它的值始终为零。为什么会发生这种情况

Private oRunDefDS As DataSet
Dim oDR As DataRow = oRunDefDS.Tables("RunDef").NewRow()
Rundef
表的设计:


在代码中创建新行时,该行尚未插入到数据库中。这意味着数据库引擎没有分配其增量ID,而是将其默认值设置为0

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


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

在代码中创建新行时,它尚未插入到数据库中。这意味着数据库引擎没有分配其增量ID,而是将其默认值设置为0

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



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

你能展示一下你那张桌子的设计吗?自动递增(SQL Server中的标识)设置不正确似乎是有道理的。@DKyleo我已经用它更新了问题。希望它能帮助Sokay,打开列属性中RunID列的标识规范,并检查是否列为“是”或“否”。除非插入了默认值或绑定0,您的标识键应该可以工作。您是在将记录保存到数据库之前还是之后查看RunID?是否可以显示特定表的设计?自动递增(SQL Server中的标识)设置不正确似乎是有道理的。@DKyleo我已经用它更新了问题。希望它能帮助Sokay,打开列属性中RunID列的标识规范,并检查是否列为“是”或“否”。除非插入了默认值或绑定0,您的标识键应该有效。您是在将记录保存到数据库之前还是之后查看RunID?您的意思可能是插入的
Commit
在谈论数据库时总是指事务我认为NewRow()应该自己初始化Id字段,对吗?正确,但是NewRow对象只在内存中,不在数据库中。只有在保存时才会应用增量ID。@MuhammedThabjeel不,这只是数据表的行构造函数,可能与数据库*无关。标识值由数据库生成,而不是由code@MuhammedThabjeel绝对不是。也许有一些自定义代码可以在插入之前修改内容。或者,如果数据表具有关系,则使用负值为相关记录提供临时ID。当数据集保存到数据库时,这些值将替换为真实值。您可能指的是插入的
Commit
在谈论数据库时总是指事务我认为NewRow()应该自己初始化Id字段,对吗?正确,但是NewRow对象只在内存中,不在数据库中。只有在保存时才会应用增量ID。@MuhammedThabjeel不,这只是数据表的行构造函数,可能与数据库*无关。标识值由数据库生成,而不是由code@MuhammedThabjeel绝对不是。也许有一些自定义代码可以在插入之前修改内容。或者,如果数据表具有关系,则使用负值为相关记录提供临时ID。当数据集保存到数据库时,这些值将替换为真实值