В чем разница между ExecuteScalar, ExecuteReader и ExecuteNonQuery? - PullRequest
97 голосов
/ 04 июня 2010

В каких случаях мы используем эти три? Где я должен использовать один, а где нет?

Ответы [ 9 ]

178 голосов
/ 04 июня 2010
  • ExecuteScalar обычно используется, когда ваш запрос возвращает одно значение. Если он возвращает больше, то результатом является первый столбец первой строки. Примером может быть SELECT @@IDENTITY AS 'Identity'.
  • ExecuteReader используется для любого набора результатов с несколькими строками / столбцами (например, SELECT col1, col2 from sometable).
  • ExecuteNonQuery обычно используется для операторов SQL без результатов (например, UPDATE, INSERT и т. Д.).
38 голосов
/ 11 августа 2012

ExecuteNonQuery ():

  1. будет работать только с запросами действий (создание, изменение, удаление, вставка, обновление, удаление).
  2. Возвращает количество строк, обработанных запросом.
  3. Тип возвращаемого значения: int
  4. Возвращаемое значение является необязательным и может быть присвоено целочисленной переменной.

ExecuteReader ():

  1. будет работать с запросами действия и бездействия (Выбрать)
  2. Возвращает коллекцию строк, выбранных в запросе.
  3. Тип возврата: DataReader.
  4. Возвращаемое значение является обязательным и должно быть назначено другому объекту DataReader.

ExecuteScalar ():

  1. будет работать с запросами без действий, которые содержат агрегатные функции.
  2. Возвращает значение первой строки и первого столбца результата запроса.
  3. Тип возвращаемого значения: object.
  4. Возвращаемое значение является обязательным и должно быть присвоено переменной требуемого типа.

Ссылочный URL:

http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html

37 голосов
/ 04 июня 2010

Каждый из них имеет разные типы исполнения.

  • ExecuteScalar будет типом запроса, который будет возвращать одно значение.

    Примером будет возвращение сгенерированного идентификатора после вставки.

    INSERT INTO my_profile (Address) VALUES ('123 Fake St.'); SELECT CAST(scope_identity() AS int)

  • ExecuteReader предоставляет вам устройство чтения данных обратно, который позволит вам прочитать все из столбцов результатов строки вовремя.

    Примером может быть получение информации профиля для одного или нескольких пользователей.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery - это любой SQL, который не возвращает значения, но на самом деле выполняет какую-то форму работы как вставка удаление или изменение что-то.

    Примером может служить обновление профиля пользователя в базе данных.

    UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'

9 голосов
/ 04 июня 2010

Из документов (примечание: MSDN - это удобный ресурс, когда вы хотите знать, что делать!):

ExecuteScalar

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

ExecuteReader

Отправляет CommandText в Соединение и создает SqlDataReader.

... и из SqlDataReader ...

Предоставляет способ чтения потока строк только для пересылки из базы данных SQL Server. Этот класс не может быть унаследован.

ExecuteNonQuery

Вы можете использовать ExecuteNonQuery для выполнения операций каталога (например, запроса структуры базы данных или создания объектов базы данных, таких как таблицы) или для изменения данных в базе данных без использования DataSet, выполнив UPDATE, INSERT или УДАЛИТЬ заявления.

8 голосов
/ 04 июня 2010

Чтобы добавить к тому, что другие опубликовали:

ExecuteScalar концептуально возвращает крайний левый столбец из первой строки набора результатов запроса; Вы можете выполнить ExecuteScalar для персонала SELECT * FROM, но вы получите только первую ячейку в результирующих строках Обычно используется для запросов, которые возвращают одно значение. Я не уверен на 100% в SQLServer, но в Oracle вы не используете его для запуска FUNCTION (код базы данных, который возвращает одно значение) и ожидаете, что он даст вам возвращаемое значение функции даже хотя функции возвращают отдельные значения. Однако, если вы запускаете функцию как часть запроса, например, SELECT SUBSTR ('abc', 1, 1) FROM DUAL, тогда он даст возвращаемое значение в силу того факта, что возвращаемое значение хранится в самой верхней левой ячейке результирующего набора строк

ExecuteNonQuery будет использоваться для запуска хранимых процедур, функций и запросов базы данных, которые изменяют данные (INSERT / UPDATE / DELETE) или изменяют структуру базы данных (CREATE TABLE ...). Обычно возвращаемое значение вызова является показателем того, сколько строк было затронуто операцией, но проверьте документацию БД, чтобы гарантировать это

4 голосов
/ 28 октября 2013

ExecuteReader() выполняет запрос SQL, который возвращает объект DBDataReader провайдера данных, который обеспечивает только прямой и доступ только для чтения для результата запроса.

ExecuteScalar() аналогичен методу ExecuteReader(), предназначенному для одноэлементного запроса, например получения количества записей.

ExecuteNonQuery() выполнить не-запрос, который работает с созданием, удалением, обновлением, вставкой)

3 голосов
/ 22 апреля 2015

Метод ExecuteNonQuery возвращает количество строк, выполненных с помощью операций INSERT, DELETE или UPDATE. Этот метод ExecuteNonQuery будет использоваться только для операторов вставки, обновления и удаления, создания и SET. (Подробнее)

ExecuteScalar вернет значение из одной строки в одном столбце, т.е. одно значение, при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Это очень быстро получить отдельные значения из базы данных. (Подробнее)

ExecuteReader будет использоваться для возврата набора строк при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Этот метод предназначен только для прямого поиска записей и используется для чтения значений таблицы от первого до последнего. (Подробнее)

3 голосов
/ 31 марта 2014

ExecuteNonQuery

Этот метод ExecuteNonQuery будет использоваться только для операторов вставки, обновления и удаления, создания и SET. Метод ExecuteNonQuery возвращает количество строк, выполненных с помощью операций INSERT, DELETE или UPDATE.

ExecuteScalar

Очень быстро получать отдельные значения из базы данных. Execute Scalar вернет значение из одной строки в одном столбце, т.е. одно значение, при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. ExecuteReader

Execute Reader будет использоваться для возврата набора строк при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Этот метод предназначен только для прямого поиска записей и используется для чтения значений таблицы от первого до последнего.

1 голос
/ 16 августа 2017

ExecuteNonQuery: обычно используется, когда ничего не возвращается из операторов Sql, таких как операции вставки, обновления, удаления.

cmd.ExcecuteNonQuery();

ExecuteScalar:

Он будет использоваться, когда запрос Sql возвращает одно значение.

Int b = cmd.ExcecuteScalar();

ExecuteReader

Он будет использоваться, когда запрос Sql или хранимая процедура возвращает несколько строк / столбцов

SqlDataReader dr = cmd.ExecuteReader();

для получения дополнительной информации вы можете нажать здесь http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

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