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

时间:2011-03-14 11:58:00

标签: .net asp.net sql-server ado.net strongly-typed-dataset

我无法从我的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 

我也试过在它的参数集合中添加一个输出参数: enter image description here

这是我的代码的一部分,它更新数据库并设置新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及其参数集合的屏幕截图: enter image description here

提前致谢。

1 个答案:

答案 0 :(得分:4)

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

--Return the new id
SELECT SCOPE_IDENTITY() 

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

Query Properties window

所以我可以这样回复:

newRMA = Me.dsRMA.RMA.AddRMARow()