【问题标题】:Database-independent way to retrieve generated id in ADO.NET在 ADO.NET 中检索生成的 id 的独立于数据库的方法
【发布时间】:2012-05-22 11:54:48
【问题描述】:

在 ADO.NET 中是否有办法在执行 INSERT 语句后检索自动生成的 ID?我知道 Sql Server 的 SELECT @@IDENTITY 和 MySQL 的 SELECT last_insert_id(),但我需要的是一种独立于数据库的方式来检索 ID。

【问题讨论】:

    标签: ado.net


    【解决方案1】:

    我认为没有办法存在,因为获取最后插入的 id 的命令是特定于供应商的。您可以做的是合并查询以在您的主查询中获取最后插入的 id(我理解这不是您想要的),然后编写一个 C# 函数来读取它,而不考虑您的数据库(不依赖于特定的 ADO.NET 类型但在接口IDbDataReaderIDbCommand上指定的方法上)

    否则,您将不得不依赖一些 ORM 解决方案,例如实体框架,它会为您处理所有这一切,让您免于手动获取最后插入的 id 的麻烦,尽管实现将是非常特定于 db 的。你可以在这里看到一个很好的讨论:

    getting identity row value using ADO.NET Entity

    您可以看到this link,这将使您对直接访问依赖数据适配器的记录有一些了解(但我不喜欢它)。

    【讨论】:

    • 感谢您的回答。想知道为什么ADO.NET这个数据库抽象层,没有抽象出获取生成id的方式。
    • @Florian 因为 ADO 不是负责插入和更新工作的人,它是底层数据库。但我也想知道为什么 ADO 接口没有强迫其客户编写 getlastinsertedid 函数!
    • 是的,太糟糕了。我认为没有技术原因,因为在 JDBC 和 PDO 中存在此功能。
    • @Florian 告诉我这个新消息!那么JDBC肯定比ADO好!会试试的!但我不喜欢 Java 没有 C# usings 的事实,这对于处理一次性用品的层中的干净代码非常重要!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多