我无法从我的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 identity:yes,Identity Increment: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及其参数集合的屏幕截图:
提前致谢。
答案 0 :(得分:4)
这里我是怎么做的:我将以下内容附加到我的insert-command的CommandText:
--Return the new id
SELECT SCOPE_IDENTITY()
然后我将该查询的“ ExecuteMode ”设置为“ Scalar ”而不是“ NonQuery ”
所以我可以这样回复:
newRMA = Me.dsRMA.RMA.AddRMARow()