2015-09-29 1 views
1

У меня есть вопрос о настройках. я использовал и видел использовал оба этих примеров, и было интересно, если один лучше/быстрее/предпочтительнее другой ...Разница между полями rs! И rs.fields («поле»)

Использование SQL Server 2008 (RS = RecordSet)

RS!field 

против

RS.Fields("Field") 

Первый, более короткий, быстрый в использовании, но есть ли какие-либо преимущества для одного или другого?

+1

Это ADO.NET правильно? –

+0

Не понял ли я форум? – Obfuscated

+0

Не тот форум, но вместо этого вы указали не те теги! –

ответ

1

Нет, они эквивалентны в VB. От the documentation:

Используйте оператор ! только на класс или интерфейс в качестве словаря оператора доступа. Класс или интерфейс должны иметь свойство по умолчанию, которое принимает один аргумент String. Идентификатор, следующий за оператором !, становится значением аргумента, переданным свойству по умолчанию в виде строки.

Поскольку Fields является собственностью "по умолчанию" для Recordset и Item является свойством по умолчанию для Fields,

RS!field 

компилируется

RS.Fields("field") 

который технически

RS.Fields.Item("field") 

Обратите вниманием, что вы можете сделать

RS("field") 

является один лучше/быстрее/предпочтительнее, чем другие?

Быстрее? Нет. Предпочтительно? Ну, последнее использование более совместимо с другими языками .NET, поэтому из-за этого он может быть предпочтительнее в больших кругах.

+0

@Ben [этот ответ] (http://stackoverflow.com/a/15958981/1081897) и связанная статья внутри, похоже, указывает на другое. Я не эксперт VBA каким-либо образом, но я думаю, что мы просто в семантическом аргументе, который не меняет сердце ответа, что оба синтаксиса эквивалентны. –

+0

Но вызывает ли это вызов 'Collect', потому что это свойство _default_ (которое реализуется с помощью специального атрибута' DISPID_COLLECT')? Или классы _all_, которые позволяют '!' Иметь свойство 'Collect'? Я не могу найти официальную документацию по MS, которая подтверждает любые форумы, основанные только на заявлениях. Но я все еще согласен с ответом, что они эквивалентны, даже если фактическая механика _why_ может отличаться. –

+0

Коррекция снова: я просто попробовал это в VBA, и я ошибся./ненавидеть, когда это произойдет. – Ben