使用TableAdapter插入后返回错误的ID
当我使用 TableAdapter< 执行插入时/code>
:
int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, "",
totalprice, amountpaid);
返回错误的 id 1
,而应该返回 15。
如何获取正确的 ID?
When I perform an insert with TableAdapter
:
int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, "",
totalprice, amountpaid);
It returns the incorrect id 1
while it should return 15.
How to get the correct ID?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将执行模式属性设置为标量,那么你就得到了ID,否则行会受到影响。您可以不在查询向导中设置查询的属性窗口。
(图 28)
set the execute mode property to Scalar, then you get the ID, otherwise the rows-affected. You set the property properties window of the query not in the Query wizard.
(fig 28)
表适配器返回受影响的行数而不是 ID。
The table adapter returns the number of rows affected not the id.
我假设您有一个带有自动生成值的 pid 列。
回复此帖子有答案了。
从同一个打开的连接应该可以做到这一点。
I'm assuming that you have a pid column with an autogenerated value.
The reply to this post has the answer.
From the same open connection should do it.
1) 存储过程:
存储过程的主体必须与此类似:
这里重要的部分是使用 SELECT SCOPE_IDENTITY() 而不是 RETURN< /strong> SCOPE_IDENTITY()。
编辑:如果您调用函数而不是存储过程,则使用 RETURN 将起作用。
2) 表适配器:
右键单击表适配器,然后从上下文菜单中选择“添加查询”。弹出TableAdapter查询配置向导:
选择命令类型:选择“使用现有存储过程”。
选择SP返回的数据形状:选择“单个值”。
为方法输入适当的名称,例如InsertXYZ
3) 您的代码:< /strong>
现在,当您在表适配器上调用方法 InsertXYZ 时,它将返回一个可以转换为 Int32 的对象。该值就是新记录的 ID!
1) The stored procedure:
The body of your stored procedure must be similar to this:
The important part here is to use SELECT SCOPE_IDENTITY() and not RETURN SCOPE_IDENTITY().
Edit: using RETURN will work if you are calling a function instead of a stored procedure.
2) The table adapter:
Right click on your table adapter and select Add Query from the context menu. The TableAdapter Query Configuration Wizard pops-up:
Choose a Command Type: select "Use existing stored procedure".
Choose the shape of data returned by the SP: select "A single value".
Enter an appropriate name for the method, e.g. InsertXYZ
3) Your code:
Now, when you call the method InsertXYZ on your table adapter, it will return an object which you can cast to Int32. That value is the ID of the new record!