【问题标题】:Are there any benefits to using a specific method to get value from IDataReader?使用特定方法从 IDataReader 获取价值有什么好处吗?
【发布时间】:2012-04-05 00:43:34
【问题描述】:

有多种方法可以从 IDataReader 获取值。

reader["FirstName"]; // by column name array style.
reader[0];           // by index array style.
reader.GetValue(0);  // by index method style.
reader.GetString(0); // by index using specific method.

其中一个比另一个更好吗?它们中的任何一个都有性能缺陷吗?

【问题讨论】:

    标签: c# database


    【解决方案1】:

    在极少数情况下您不应该使用列名。从技术上讲,列名被转换为索引,因此直接使用索引会稍微快一些。但是,与数据库调用本身相比,该余量将相形见绌,因此它确实无关紧要。并且 - 假设您已将语义含义赋予要返回的列,并且没有实现某种通用数据处理器 - 使用索引使您将来更有可能在查询中的数据发生更改时意外引入错误.

    【讨论】:

      【解决方案2】:

      reader.GetValue(0) 是最快的方法。

      使用reader["FirstName"] 调用reader.GetOrdinal("FirstName"),然后调用reader.GetValue(0)reader[0] 只是在它的 getter 中调用 reader.GetValue(0)

      【讨论】:

      • 不过,从可读性的角度来看,我会使用列名变体。
      • 从技术上讲,它实际上取决于所使用的 IDataReader 的实现。由于 IDataReader 只是一个接口,因此没有与之相关的任何特定性能。鉴于使用 SqlDataReader 虽然我同意以上是正确的。
      • @AdamGritt,是的,但这是来自 OleDbDataReader 实现。
      • 您还必须计算调用 GetString 与 GetValue 所涉及的强制转换/类型检查。我还想知道提前缓存名称/索引对,然后为每条记录调用 GetValue(int)。这也取决于 GetOrdinal 的实现。
      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2019-12-14
      • 2011-04-24
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多