首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从插入记录的主键中检索标识值

从插入记录的主键中检索标识值
EN

Stack Overflow用户
提问于 2011-03-14 19:58:00
回答 1查看 3.3K关注 0票数 2

我无法从我的DataRow中插入的记录(通过DataAdapter.Update)检索新的标识值。

我使用一个强类型的数据集作为DAL。我想要更新的表与SelectCommand中的其他表连接在一起,因此设计器不能自动生成insert-/ update -/delete-命令,也不能自动“刷新DataTable”(s. http://msdn.microsoft.com/de-de/library/dex7k4dw%28v=VS.100%29.aspx)。

我尝试在主键的DataColumn上设置AutoIncrement=true/false,但结果是相同的: last MAX- ID +1而不是数据库生成的实际ID(SQL-Server2005EP;pk数据类型:int,is identity:yes,Identity Increment:1)。

如果应用程序的另一个实例插入了第一个实例尚不知道的记录,并因此生成了一个已经存在的ID,则该值将是错误的f.e。

为了从db中检索新的身份,我在插入命令的CommandText后面添加了以下内容:

代码语言:javascript
复制
;SELECT CAST (SCOPE_IDENTITY() AS int) AS newIdRMA 

此外,我还尝试将Output-Parameter添加到它的参数集合中:

这是我的代码的一部分,它更新数据库并设置新的ID(这不起作用):

代码语言:javascript
复制
 Me.dsRMA.RMA.AddRMARow(newRMA) ' adding new row to the (strong typed) DataTable ' 
 numRowsUpdated = daRMA.Update(Me.dsRMA.RMA) ' update via DataAdapter and insert the new record in DB '
 DirectCast(Page, Services).IdRma = newRMA.IdRMA ' this is not the actual value from DB but old Max-ID +1 '

编辑:

这是我的TableAdapter的InsertCommand及其参数集合的屏幕截图:

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-14 20:45:28

我是这样做的:我将以下内容附加到我的插入命令的CommandText中:

代码语言:javascript
复制
--Return the new id
SELECT SCOPE_IDENTITY() 

然后我将该查询的"ExecuteMode“设置为”标量“,而不是"NonQuery”。

所以我可以这样检索它:

代码语言:javascript
复制
newRMA = Me.dsRMA.RMA.AddRMARow()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5298230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档