asp.net InsertCommand 返回最新的插入 ID
我无法使用 asp.NET 中的类型化数据集从 SQL Server 2000 数据库检索最新插入的 ID。
我创建了一个表适配器,并勾选了“刷新数据表”和“生成插入、更新和删除语句”。这会自动生成 Fill 和 GetData 方法以及 Insert、Update、Select 和 Delete 语句。
我已经尝试了该线程中的所有可能的解决方案
http://forums.asp.net/t/990365 .aspx
但我仍然不成功,它总是返回 1(=受影响的行数)。 我不想创建单独的插入方法,因为自动生成的 insertCommand 完全适合我的需求。
正如上面线程中所建议的,我尝试更新 InsertCommand SQL 语法以添加 SELECT SCOPY_IDENTITY() 或类似的内容,我尝试添加 ReturnValue 类型的参数,但我得到的只是受影响的行数。
有人对此有不同的看法吗? 提前致谢! 斯泰因
I'm unable to retrieve the latest inserted id from my SQL Server 2000 db using a typed dataset in asp.NET
I have created a tableadapter and I ticked the "Refresh datatable" and "Generate Insert, Update and Delete statements". This auto-generates the Fill and GetData methods, and the Insert, Update, Select and Delete statements.
I have tried every possible solution in this thread
http://forums.asp.net/t/990365.aspx
but I'm still unsuccesfull, it always returns 1(=number of affected rows).
I do not want to create a seperate insert method as the auto-generated insertCommand perfectly suits my needs.
As suggested in the thread above, I have tried to update the InsertCommand SQL syntax to add SELECT SCOPY_IDENTITY() or something similar, I have tried to add a parameter of type ReturnValue, but all I get is the number of affected rows.
Does anyone has a different take on this?
Thanks in advance!
Stijn
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我决定放弃,我不能再在这上面浪费时间了。
我使用 Insert 语句,然后执行 select MAX(id) 查询来获取插入 ID
如果有人应该有解决方案,我很高兴在这里阅读,
谢谢
斯泰因
I decided to give up, I can't afford to waste any more time on this.
I use the Insert statement after which I do a select MAX(id) query to hget the insert ID
If anyone should have a solution, I'll be glad to read it here
Thanks
Stijn
我成功找到了一种在使用表适配器插入后获取增量 id 的方法。
我的方法有点不同,我使用存储过程来进行插入,因此我的插入命令具有除 ID 之外的所有值,我让 sp 返回刚刚调用的 ID:
设置@ID=SCOPE_IDENTITY()
进而
提交交易
最后一行将是
RETURN @ID
然后我在表适配器参数中搜索 InsertCommand 并将 @RETURNVALUE 设置为表的增量 ID 列,因此在执行时会自动将返回值放在 id 字段上。
希望这有帮助
I successfully found a way to get the incremental id after insert using my table adapter.
My approach is a little different, I'm using a Store procedure to make the insert, so my insert command has all the values but the ID, I made the sp return the ID just calling:
SET @ID=SCOPE_IDENTITY()
and then
COMMIT TRAN
and last line will be
RETURN @ID
Then I searched my table adapter parameters for InsertCommand and set the @RETURNVALUE to the column of the incremental ID of the table, so when it's executed automatically put the return value on the id field.
Hope this help
打开TableAdapter -> 的属性默认选择查询->高级选项。并勾选刷新数据表选项。现在保存适配器。现在,当您对表适配器调用更新时,数据表将在更新/插入操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何列设置为自动递增,则数据表将具有最近更新后的最新值。
现在您可以将更新调用为 TableAdapterObj.Update(ds .dataTable);
从 DataTable(ds.dataTable) 列中读取最新值,并在更新/插入之前将相应的值分配到子表中。这将完全按照您想要的方式工作。
替代文本 http://ruchitsurati.net/files/tds1.png
Open the properties of TableAdapter -> Default Select Query -> Advnaced options. and Check the option of Refresh the data table. Save the adapter now. Now when you call update on table-adapter, the data-table will be updated [refreshed] after the update/insert operation and will reflect the latest values from database table. if the primary-key or any coloumn is set to auto-increment, the data-table will have those latest value post recent update.
Now you can Call the update as TableAdapterObj.Update(ds.dataTable);
Read latest values from the DataTable(ds.dataTable) coloumns and assign respective values into the child table before update/insert. This will work exactly the way you want.
alt text http://ruchitsurati.net/files/tds1.png