Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Изменить по rwwilden: Взглянув с рефлектором внутри SqlCommand.ExecuteScalar(), вы можете увидеть эти строки:

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

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

Ответ 2

От Метод SqlCommand.ExecuteScalar

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

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

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

Ответ 3

Из 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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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