7

当我执行插入时TableAdapter

int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, "", 
    totalprice, amountpaid);

它返回不正确的 id 1,而它应该返回 15。

如何获得正确的身份证?

4

4 回答 4

13

将执行模式属性设置为Scalar然后您将获得 ID,否则会影响行。您不在查询向导中设置查询的属性属性窗口。

替代文字

(图 28)

于 2011-01-23T21:37:11.650 回答
7

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

于 2011-01-23T21:34:57.483 回答
1

我假设您有一个带有自动生成值的 pid 列。

这个帖子的回复有答案。

select @@pid 

从同一个打开的连接应该做到这一点。

于 2011-01-23T21:37:34.677 回答
1

1)存储过程:

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

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

SELECT SCOPE_IDENTITY();

这里重要的部分是使用SELECT SCOPE_IDENTITY() 而不是RETURN SCOPE_IDENTITY()。编辑:如果您调用的是函数而不是存储过程,则使用 RETURN 将起作用。

2) 表适配器:

右键单击您的表适配器并从上下文菜单中选择添加查询。弹出 TableAdapter 查询配置向导:

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

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

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

3)你的代码:

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

于 2013-05-26T17:48:52.157 回答