【问题标题】:asp.net InsertCommand to return latest insert IDasp.net InsertCommand 返回最新的插入 ID
【发布时间】:2009-09-28 10:35:18
【问题描述】:

我无法使用 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 类型的参数,但我得到的只是受影响的行数.

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

【问题讨论】:

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


    【解决方案1】:

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

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

    谢谢 斯蒂金

    【讨论】:

    • 如果你使用单独的插入查询而不是自动生成呢?
    • 使用 Max(id) 是不好的方法,如果很多用户输入数据,会返回错误的 ID...
    【解决方案2】:

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

    我的方法有点不同,我使用 Store 过程进行插入,所以我的插入命令具有除 ID 之外的所有值,我让 sp 返回刚刚调用的 ID: 设置@ID=SCOPE_IDENTITY() 进而 提交翻译 最后一行将是 返回@ID

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

    希望有帮助

    【讨论】:

      【解决方案3】:

      您需要告诉表格的表格适配器刷新 更新/插入操作后的数据表。 您可以这样做。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        相关资源
        最近更新 更多