【问题标题】:Difference between rs!field and rs.fields("field")rs!field 和 rs.fields("field") 之间的区别
【发布时间】:2015-12-26 22:20:20
【问题描述】:

我有一个关于偏好的问题。 我已经使用并看到使用这两个示例,并且想知道一个是否更好/更快/更喜欢另一个...

使用 SQL Server 2008 (RS = 记录集)

RS!field

RS.Fields("Field")

第一个更短,打字更快,但是其中一个有什么优势吗?

【问题讨论】:

  • 这是 ADO.NET 对吧?
  • 我走错论坛了吗?
  • 不是错误的论坛,而是您提供了错误的标签!

标签: sql vba sql-server-2008


【解决方案1】:

不,它们在 VB 中是等价的。来自the documentation

仅在类或接口上使用! 运算符作为字典访问运算符。类或接口必须具有接受单个 String 参数的默认属性。紧跟! 运算符的标识符成为作为字符串传递给默认属性的参数值。

由于FieldsRecordset 的“默认”属性,而ItemFields 的默认属性,

RS!field

编译成

RS.Fields("field")

技术上是这样的

RS.Fields.Item("field")

注意,你也可以这样做

RS("field")

一个比另一个更好/更快/更受欢迎吗?

更快?不,首选?好吧,后一种用法与其他 .NET 语言更一致,因此在更大的圈子中可能更喜欢它。

【讨论】:

  • @Ben this answer 和其中的链接文章似乎另有说明。无论如何,我都不是 VBA 专家,但我认为我们只是在一个语义论点中,这并没有改变这两种语法是等价的答案的核心。
  • 但它是否调用Collect 是因为这是 default 属性(通过使用特殊的DISPID_COLLECT 属性实现)?或者允许!所有 类是否具有Collect 属性?我找不到任何证实这两种说法的官方 MS 文档 - 只有论坛。但我仍然坚持他们是等价的答案,即使 why 的实际机制可能不同。
  • 再次更正:我刚刚在VBA中尝试过,我错了。 /讨厌这种情况。
猜你喜欢
  • 2013-04-21
  • 2011-11-22
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多