我无法从DataRow中的插入记录(通过DataAdapter.Update)检索新的标识值. 我使用强类型数据集作为DAL.我想要更新的表与SelectCommand中的其他表连接,因此设计器不能自动生成insert- / update- / delet
我使用强类型数据集作为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()