C# 使用TableAdapter插入后返回的ID不正确

C# 使用TableAdapter插入后返回的ID不正确,c#,c#-3.0,tableadapter,C#,C# 3.0,Tableadapter,当我使用以下命令执行插入时: 它返回不正确的id1,但应返回15 如何获取正确的ID?表适配器返回受影响的行数,而不是ID。将执行模式属性设置为标量,否则将返回受影响的行数。您未在查询向导中设置查询的属性窗口 (图28)我假设您有一个pid列,其中包含一个自动生成的值 答案是肯定的 select @@pid 从同一个打开的连接执行此操作。1)存储过程: 存储过程的主体必须与此类似: INSERT INTO MyTable (C1, C2, C3) VALUES (@c1, @c2, @c3

当我使用以下命令执行插入时:

它返回不正确的id
1
,但应返回15


如何获取正确的ID?

表适配器返回受影响的行数,而不是ID。

将执行模式属性设置为标量,否则将返回受影响的行数。您未在查询向导中设置查询的属性窗口


(图28)

我假设您有一个pid列,其中包含一个自动生成的值

答案是肯定的

select @@pid 
从同一个打开的连接执行此操作。

1)存储过程:

存储过程的主体必须与此类似:

INSERT INTO MyTable (C1, C2, C3) VALUES (@c1, @c2, @c3);

SELECT SCOPE_IDENTITY();
这里的重要部分是使用选择范围标识(),而不是返回范围标识()。 编辑:如果调用的是函数而不是存储过程,则使用RETURN将起作用

2)表格适配器:

在表适配器上单击鼠标右键,然后从关联菜单中选择“添加查询”。将弹出TableAdapter查询配置向导:

  • 选择命令类型:选择“使用现有存储过程”

  • 选择SP返回的数据形状:选择“单个值”

  • 为方法输入适当的名称,例如InsertXYZ

3)您的代码:


现在,当您在表适配器上调用方法InsertXYZ时,它将返回一个可以强制转换为Int32的对象。该值是新记录的ID

请重新格式化您的问题,使其成为一个问题并使其可读。现在是一个问题:)pid是用自动递增的值购买的,谈论生命的循环本质;是我写的那个回复。这不是一个真正的问题,这是设计的:-)应该有一个方法来解决这个“特性”,当插入多行时,插入必须返回什么?Insert方法如何“知道”哪个列包含您要查找的id?换句话说:按照其他答案中的链接,看看其他人是如何处理的。请注意(如本文所述),您仍然需要修改insert查询以使其返回请求的标识。
INSERT INTO MyTable (C1, C2, C3) VALUES (@c1, @c2, @c3);

SELECT SCOPE_IDENTITY();