В чем разница между чтением значения из SqlDataReader с использованием этого синтаксиса:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
ИЛИ
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
В чем разница между чтением значения из SqlDataReader с использованием этого синтаксиса:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
ИЛИ
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
Я думаю, что причина использования GetOrdinal() заключается в том, что вы можете кэшировать результат и повторно использовать его несколько раз для повышения производительности.
например.
Dim reader As SqlClient.SqlDataReader
int valueOrdinal = reader.GetOrdinal("value");
while ( ... )
{
var value = reader.GetString(valueOrdinal);
}
GetOrdinal
сначала выполняет поиск с учетом регистра. Если это не удается, выполняется второй поиск без учета регистра. GetOrdinal
является нечувствительным к каналу. Поскольку ординарные поисковые запросы более эффективны, чем именованные, неэффективно вызывать GetOrdinal
в цикле. Сэкономьте время, вызвав GetOrdinal
один раз и присвоив результаты целочисленной переменной для использования в цикле.
Источник: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx
Я просто хочу добавить, что контекст того, сколько записей, которые вы ожидаете, играет большую роль, потому что, если вы возвращаете одну строку, разница в производительности между этими двумя не будет значительной. Однако, если вы зацикливаете на многие строки, то использование типизированного доступа лучше для производительности, так как оно оптимизировано. Таким образом, в этом случае, если вам нужно получить лучшую производительность с помощью имени столбца, тогда вызовите GetOrdinal один раз, поместите его в переменную, а затем используйте типизированный accessor с порядковым номером столбца в вашем цикле. Это обеспечит наилучшую производительность.
если вам интересно узнать о различиях в производительности, мой пост в блоге