简体   繁体   中英

asp.net InsertCommand to return latest insert ID

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

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

You need to tell your table's table-adapter to refresh the data-table after update/insert operation. This is how you can do that.

  1. 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.

  2. Now you can Call the update as TableAdapterObj.Update(ds.dataTable);

  3. 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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM