Есть ли у ExecuteScalar () какие-либо преимущества перед ExecuteReader ()? - PullRequest
19 голосов
/ 08 марта 2010

Имеет ли ExecuteScalar() какие-либо преимущества перед ExecuteReader()?

Ответы [ 6 ]

28 голосов
/ 08 марта 2010

ExecuteScalar возвращает только первое значение из первой строки набора данных. Внутренний он обрабатывается так же, как ExecuteReader(), открывается DataReader, выбирается значение и впоследствии DataReader уничтожается. Я также всегда задавался вопросом об этом поведении, но у него есть одно преимущество: оно происходит в рамках Framework ... и вы не можете конкурировать с Framework по-своему.

Редактировать rwwilden: Взглянув на Reflector внутри SqlCommand.ExecuteScalar(), вы увидите следующие строки:

SqlDataReader ds = this.RunExecuteReader(
    CommandBehavior.Default, RunBehavior.ReturnImmediately, true, "ExecuteScalar");
obj2 = this.CompleteExecuteScalar(ds, false);

Именно то, что происходит внутри ExecuteReader. Другое преимущество состоит в том, что ExecuteScalar возвращает null, когда данные не читаются. Если вы используете ExecuteReader, вам придется проверить это самостоятельно.

14 голосов
/ 08 марта 2010

С SqlCommand.ExecuteScalar Method

Используйте метод ExecuteScalar для получить одно значение (например, совокупное значение) из базы данных. Для этого требуется меньше кода, чем при использовании метода ExecuteReader, а затем выполнение операций, которые вы нужно сгенерировать одно значение используя данные, возвращаемые SqlDataReader.

Также от В чем разница между ExecuteReader, ExecuteNonQuery и ExecuteScalar

  • ExecuteReader : используется для доступа данные. Это обеспечивает только вперед, только для чтения, подключенный набор записей.
  • ExecuteNonQuery : использовать для данных манипуляции, такие как вставка, обновление, Удалить.
  • ExecuteScalar : используется для восстановления 1 строка 1 цв. значение., т.е. одно значение. например: для извлечения агрегатной функции. Это быстрее, чем другие способы получение одного значения из БД.
4 голосов
/ 08 марта 2010

С Страница ExecuteScalar на MSDN:

Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader

Итак, это не быстрее и не лучше, но используется для уменьшения объема кода, написанного, когда требуется только одно значение.

2 голосов
/ 08 марта 2010

Execute Scalar предназначен для получения одного значения из базы данных, а Execute Reader для получения нескольких записей в DataTable.

2 голосов
/ 08 марта 2010

Если у вас есть одно значение, возвращаемое из вашего запроса или SP, всегда лучше использовать ExecuteScalar (), так как он получает первое значение результата. Следовательно, в такой ситуации это происходит быстрее.

0 голосов
/ 14 января 2016

ExecuteScalar () займет меньше ресурсов по сравнению с ExecuteReader (), так как позже вернет данные из нескольких столбцов из базы данных.

ExecuteReader () будет создавать экземпляр SqlDataReader, основанный на потоке, и запрашивать результаты из источника данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...