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

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

9 ответов


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

ExecuteNonQuery ():

  1. будет работать только с запросами действий (Create,Alter,Drop,Insert,Update, Delete).
  2. возвращает количество строк, произведенных запросом.
  3. тип возврата-int
  4. возвращаемое значение является необязательным и может быть присвоена переменной типа integer.

ExecuteReader ():

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

executescalar так():

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

URL ссылки:

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


это разные исполнения тип.

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


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

ExecuteScalar

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

ExecuteReader

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

... и от SqlDataReader ...

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

ExecuteNonQuery

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


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

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

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


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

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

ExecuteNonQuery() выполнить не запрос, который работает с create, delete, update, insert)


ExecuteNonQuery

этот метод ExecuteNonQuery будет использоваться только для инструкций insert, update и delete, Create и SET. Метод ExecuteNonQuery возвращает количество строк, выполненных с помощью операций вставки, удаления или обновления.

ExecuteScalar

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

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


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

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

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


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

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