当前位置 : 主页 > 网络推广 > seo >

.net – 从插入记录的主键中检索标识值

来源:互联网 收集:自由互联 发布时间:2021-06-16
我无法从DataRow中的插入记录(通过DataAdapter.Update)检索新的标识值. 我使用强类型数据集作为DAL.我想要更新的表与SelectCommand中的其他表连接,因此设计器不能自动生成insert- / update- / delet
我无法从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,但结果是相同的:最后一个MAX-ID 1而不是数据库生成的实际ID(SQL-Server 2005 EP; pk数据类型:int,Is身份:是的,身份增量:1).

这将是错误的值f.e如果应用程序的另一个实例插入了第一个实例尚未知道的记录,从而生成已存在的ID.

要从db中检索新标识,我将附加到insert-command的CommandText中:

;SELECT CAST (SCOPE_IDENTITY() AS int) AS newIdRMA

我也尝试在它的参数集合中添加一个输出参数:

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

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及其参数集的截图:

提前致谢.

我在这里怎么做:我将以下内容附加到我的insert-command的CommandText:

--Return the new id
SELECT SCOPE_IDENTITY()

然后我将该Query的“ExecuteMode”设置为“Scalar”而不是“NonQuery”

所以我可以这样回复它:

newRMA = Me.dsRMA.RMA.AddRMARow()
网友评论