Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从插入的记录中检索标识值';s主键_.net_Asp.net_Sql Server_Ado.net_Strongly Typed Dataset - Fatal编程技术网

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

.net 从插入的记录中检索标识值';s主键,.net,asp.net,sql-server,ado.net,strongly-typed-dataset,.net,Asp.net,Sql Server,Ado.net,Strongly Typed Dataset,我无法从DataRow中插入的记录(通过DataAdapter.Update)检索新标识值 我使用强类型数据集作为DAL。我要更新的表与SelectCommand中的其他表合并,因此设计器无法自动生成insert-/update-/delete命令,也无法自动“刷新数据表” 我尝试在主键的数据列上设置AutoIncrement=true/false,但结果是相同的:last MAX-ID+1而不是数据库生成的实际ID(SQL Server 2005 EP;pk datatype:int,is i

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

我使用强类型数据集作为DAL。我要更新的表与SelectCommand中的其他表合并,因此设计器无法自动生成insert-/update-/delete命令,也无法自动“刷新数据表”

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

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

要从db中检索新标识,我已将以下内容附加到insert命令的CommandText中:

;SELECT CAST (SCOPE_IDENTITY() AS int) AS newIdRMA 
--Return the new id
SELECT SCOPE_IDENTITY() 
我还尝试将输出参数添加到其参数集合中:

这是我更新数据库并设置新ID(无效)的代码的一部分:

编辑:

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


提前感谢。

这里是我的操作方法:我将以下内容附加到我的insert命令的CommandText中:

;SELECT CAST (SCOPE_IDENTITY() AS int) AS newIdRMA 
--Return the new id
SELECT SCOPE_IDENTITY() 
然后我将该查询的“ExecuteMode”设置为“标量”而不是“非查询

所以我可以用这种方式来检索:

newRMA = Me.dsRMA.RMA.AddRMARow()

我试试看。但是我应该在哪里将其从
非查询
更改为
标量
,因为标准InsertCommand的属性没有公开此类属性(仅
文本
TableDirect
存储过程
)?我现在尝试将InsertCommand更改为存储过程,并使用
SCOPE\u IDENTITY
作为输出参数。但是在这里,如果可以的话,数据表是如何用新值重新构造的?第二:是否可以获取两个值作为输出,并用它们刷新数据行(ID和RMA_编号)?谢谢。您所指的属性值是命令类型,执行模式是我刚才添加的屏幕截图中显示的另一个属性。对于作为输出的2个值,我不喜欢这样做。我让数据库引擎生成ID,并在BLL中设置其他值,如RMA_编号。请注意,您还可以使用确保一块查询同时执行。我明白您的意思。但是如何配置TableAdapter以在更新时使用此查询?AddrRow当前是一个子行,不返回任何内容(我认为这是因为它的ExecuteMode是默认的NonQuery)。请看上面的图片。编辑(在您的第二条评论中):RMA_编号必须是唯一的,并且最好在SQL Server中生成。因此我希望它是一个输出参数。好的,我明白了,这是因为您使用InsertCommand而不是另一个查询。为此,我在表适配器上添加了一个单独的查询,然后在BLL中扭曲所有select insert和update查询,这与您正在做的不一样。为了保持RMA_编号的唯一性,如果在事务中使用insert查询扭曲检查最后一个RMA_编号的查询,则可以。同时,我觉得我的回答与问题无关。可能是重复的