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

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

Ответ 1

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

Ответ 2

ExecuteNonQuery():

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

ExecuteReader():

  • будет работать с запросами Action и Non-Action (Select)
  • Возвращает коллекцию строк, выбранных Query.
  • Тип возвращаемого значения - DataReader.
  • Возвращаемое значение является обязательным и должно быть назначено другому объекту DataReader.

ExecuteScalar():

  • будет работать с запросами Non-Action, которые содержат агрегированные функции.
  • Возвращает значение первой строки и первого столбца результата запроса.
  • Возвращаемый тип - это объект.
  • Возвращаемое значение является обязательным и должно быть присвоено переменной требуемого типа.

Ссылка URL:

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

Ответ 3

Каждый из них выполняет другое выполнение.

  • 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'

Ответ 4

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

ExecuteScalar

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

ExecuteReader

Отправляет CommandText в Connection и строит SqlDataReader.

... и SqlDataReader...

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

ExecuteNonQuery

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

Ответ 5

Чтобы добавить к другим публикациям:

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

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

Ответ 6

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

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

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

Ответ 7

ExecuteNonQuery

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

ExecuteScalar

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

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

Ответ 8

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

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

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

Ответ 9

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