asp.net InsertCommand返回最新的插入ID

时间:2009-09-28 10:35:18

标签: asp.net sql-insert tableadapter scope-identity typed-dataset

我无法使用asp.NET中的类型化数据集从我的SQL Server 2000数据库中检索最新插入的ID

我创建了一个tableadapter,并勾选了“刷新数据表”和“生成插入,更新和删除语句”。这会自动生成Fill和GetData方法,以及Insert,Update,Select和Delete语句。

我在这个帖子中尝试了所有可能的解决方案

http://forums.asp.net/t/990365.aspx

但我仍然不成功,它总是返回1(=受影响的行数)。 我不想创建一个单独的插入方法,因为自动生成的insertCommand完全符合我的需要。

正如上面的主题所示,我试图更新InsertCommand SQL语法以添加SELECT SCOPY_IDENTITY()或类似的东西,我试图添加一个ReturnValue类型的参数,但我得到的只是受影响的行数

有没有人对此有不同看法? 提前致谢! 斯泰恩

3 个答案:

答案 0 :(得分:1)

我决定放弃,我不能再浪费时间了。 我使用Insert语句,之后我执行select MAX(id)查询以获取插入ID

如果有人应该有解决方案,我很乐意在这里阅读

由于 斯泰恩

答案 1 :(得分:0)

  

你需要告诉你的表的表适配器刷新   更新/插入操作后的数据表。   这就是你可以做到的。

  1. 打开 TableAdapter - >的属性默认选择查询 - > Advnaced选项。并选中刷新数据表选项。立即保存适配器。现在,当您在表适配器上调用update时,数据表将在更新/插入操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何coloumn设置为自动递增,则数据表将在最近更新后显示最新值。

  2. 现在您可以将更新称为TableAdapterObj.Update(ds.dataTable);

  3. 从DataTable(ds.dataTable)颜色中读取最新值,并在更新/插入之前将相应的值分配给子表。这将完全按照您的方式工作。

  4. alt text http://ruchitsurati.net/files/tds1.png

答案 2 :(得分:0)

在使用我的表适配器插入后,我成功找到了获取增量ID的方法。

我的方法有点不同,我使用Store过程来进行插入,所以我的insert命令包含所有值但是ID,我让sp返回刚刚调用的ID:  SET @ ID = SCOPE_IDENTITY() 然后  COMMIT TRAN 最后一行将是  返回@ID

然后我搜索了我的表适配器参数以获取InsertCommand,并将@RETURNVALUE设置为表的增量ID列,因此当它自动执行时,将返回值放在id字段上。

希望这个帮助