3

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

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

我已经在这个线程中尝试了所有可能的解决方案

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

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

正如上面线程中所建议的,我尝试更新 InsertCommand SQL 语法以添加 SELECT SCOPY_IDENTITY() 或类似的东西,我尝试添加 ReturnValue 类型的参数,但我得到的只是受影响的行数。

有人对此有不同的看法吗?提前致谢!斯蒂金

4

3 回答 3

1

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

如果有人应该有解决方案,我会很高兴在这里阅读

谢谢 Stijn

于 2009-09-28T12:27:49.613 回答
0

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

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

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

  3. 从 DataTable(ds.dataTable) 列中读取最新值,并在 update/insert 之前将相应的值分配到子表中。这将完全按照您想要的方式工作。

替代文字 http://ruchitsurati.net/files/tds1.png

于 2010-04-21T07:58:53.377 回答
0

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

我的方法有点不同,我使用 Store 过程进行插入,所以我的插入命令具有除 ID 之外的所有值,我让 sp 返回 ID 只是调用:SET @ID=SCOPE_IDENTITY() 然后COMMIT TRAN 和最后一行将是 RETURN @ID

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

希望这有帮助

于 2011-07-26T15:24:51.637 回答