我无法使用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类型的参数,但我得到的只是受影响的行数
有没有人对此有不同看法? 提前致谢! 斯泰恩
答案 0 :(得分:1)
我决定放弃,我不能再浪费时间了。 我使用Insert语句,之后我执行select MAX(id)查询以获取插入ID
如果有人应该有解决方案,我很乐意在这里阅读
由于 斯泰恩
答案 1 :(得分:0)
你需要告诉你的表的表适配器刷新 更新/插入操作后的数据表。 这就是你可以做到的。
打开 TableAdapter - >的属性默认选择查询 - > Advnaced选项。并选中刷新数据表选项。立即保存适配器。现在,当您在表适配器上调用update时,数据表将在更新/插入操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何coloumn设置为自动递增,则数据表将在最近更新后显示最新值。
现在您可以将更新称为TableAdapterObj.Update(ds.dataTable);
从DataTable(ds.dataTable)颜色中读取最新值,并在更新/插入之前将相应的值分配给子表。这将完全按照您的方式工作。
答案 2 :(得分:0)
在使用我的表适配器插入后,我成功找到了获取增量ID的方法。
我的方法有点不同,我使用Store过程来进行插入,所以我的insert命令包含所有值但是ID,我让sp返回刚刚调用的ID: SET @ ID = SCOPE_IDENTITY() 然后 COMMIT TRAN 最后一行将是 返回@ID
然后我搜索了我的表适配器参数以获取InsertCommand,并将@RETURNVALUE设置为表的增量ID列,因此当它自动执行时,将返回值放在id字段上。
希望这个帮助