ExecuteScalarобычно используется, когда ваш запрос возвращает одно значение. Если он возвращает больше, то результатом является первый столбец первой строки. Пример может быть SELECT @@IDENTITY AS 'Identity'.
ExecuteReaderиспользуется для любого набора результатов с несколькими строками / столбцами (например, SELECT col1, col2 from sometable).
ExecuteNonQuery обычно используется для операторов SQL без результатов (например, UPDATE, INSERT и т. д.).
Каждый из них представляет собой исполнение другого типа.
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'
Кажется, что вы можете использовать ExecuteReader для выполнения заданий, выполняемых как ExecuteScalar, так и ExecuteNonQuery, так зачем использовать два других? какое-либо преимущество в производительности?
user20358
Одна из причин, по которой следует избегать чрезмерного использования ExecuteReader, заключается в том, что он будет держать этого читателя рядом, пока вы не закончите с ним. Со всем этим вы хотите знать некоторую конкретную информацию о том, как они работают, чтобы использовать их наиболее эффективно. Я изложил здесь несколько хороших рекомендаций.
Брендан Энрик
9
Из документации (примечание: MSDN - удобный ресурс, когда вы хотите знать, что делают!):
Используйте метод ExecuteScalar для получения одного значения (например, агрегированного значения) из базы данных. Для этого требуется меньше кода, чем при использовании метода ExecuteReader, а затем выполнение операций, необходимых для генерации единственного значения с использованием данных, возвращаемых SqlDataReader.
Вы можете использовать ExecuteNonQuery для выполнения операций с каталогом (например, запроса структуры базы данных или создания объектов базы данных, таких как таблицы) или для изменения данных в базе данных без использования DataSet, выполняя операторы UPDATE, INSERT или DELETE.
ExecuteScalar концептуально возвращает крайний левый столбец из первой строки набора результатов запроса; вы можете выполнить ExecuteScalar a SELECT * FROM staff, но вы получите только первую ячейку результирующих строк. Обычно используется для запросов, возвращающих одно значение. Я не уверен на 100% насчет SQLServer, но в Oracle вы бы не использовали его для запуска FUNCTION (кода базы данных, который возвращает одно значение) и ожидаете, что он даст вам возвращаемое значение функции, даже если функции возвращают одиночные значения. Однако, если вы запускаете функцию как часть запроса, например, SELECT SUBSTR ('abc', 1, 1) FROM DUAL, тогда она выдаст возвращаемое значение в силу того, что возвращаемое значение хранится в самом верхнем левом углу. ячейка результирующего набора строк
ExecuteNonQuery будет использоваться для запуска хранимых процедур базы данных, функций и запросов, которые изменяют данные (INSERT / UPDATE / DELETE) или изменяют структуру базы данных (CREATE TABLE ...). Обычно возвращаемое значение вызова является показателем того, сколько строк было затронуто операцией, но проверьте документацию БД, чтобы гарантировать это.
ExecuteReader() выполняет SQL-запрос, который возвращает объект поставщика данных DBDataReader, который обеспечивает доступ только для пересылки и только для чтения для результата запроса.
ExecuteScalar()аналогичен ExecuteReader()методу, разработанному для одноэлементного запроса, такого как получение количества записей.
ExecuteNonQuery() выполнить не запрос, который работает с созданием, удалением, обновлением, вставкой)
Этот метод ExecuteNonQuery будет использоваться только для операторов insert, update и delete, Create и SET. Метод ExecuteNonQuery вернет количество строк, выполненных с помощью операций INSERT, DELETE или UPDATE.
ExecuteScalar
Получать отдельные значения из базы данных очень быстро. Execute Scalar вернет значение одиночной строки одиночного столбца, т.е. одиночное значение, при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды.
ExecuteReader
Execute Reader будет использоваться для возврата набора строк при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Этот метод предназначен для прямого извлечения записей и используется для чтения значений таблицы от первого до последнего.
Метод ExecuteNonQuery вернет количество строк, выполненных с помощью операций INSERT, DELETE или UPDATE. Этот метод ExecuteNonQuery будет использоваться только для операторов insert, update и delete, Create и SET. (Читать далее)
ExecuteScalar вернет одиночное значение столбца строки, то есть одиночное значение, при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Получать отдельные значения из базы данных очень быстро. (Читать далее)
ExecuteReader будет использоваться для возврата набора строк при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Этот метод предназначен для прямого извлечения записей и используется для чтения значений таблицы от первого до последнего. (Читать далее)
Ответы:
ExecuteScalar
обычно используется, когда ваш запрос возвращает одно значение. Если он возвращает больше, то результатом является первый столбец первой строки. Пример может бытьSELECT @@IDENTITY AS 'Identity'
.ExecuteReader
используется для любого набора результатов с несколькими строками / столбцами (например,SELECT col1, col2 from sometable
).ExecuteNonQuery
обычно используется для операторов SQL без результатов (например, UPDATE, INSERT и т. д.).источник
ExecuteNonQuery
может возвращать количество затронутых строк.ExecuteNonQuery ():
ExecuteReader ():
ExecuteScalar ():
Ссылка 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
ExecuteReader
... и из SqlDataReader ...
ExecuteNonQuery
источник
Чтобы добавить к тому, что опубликовали другие:
ExecuteScalar концептуально возвращает крайний левый столбец из первой строки набора результатов запроса; вы можете выполнить ExecuteScalar a SELECT * FROM staff, но вы получите только первую ячейку результирующих строк. Обычно используется для запросов, возвращающих одно значение. Я не уверен на 100% насчет SQLServer, но в Oracle вы бы не использовали его для запуска FUNCTION (кода базы данных, который возвращает одно значение) и ожидаете, что он даст вам возвращаемое значение функции, даже если функции возвращают одиночные значения. Однако, если вы запускаете функцию как часть запроса, например, SELECT SUBSTR ('abc', 1, 1) FROM DUAL, тогда она выдаст возвращаемое значение в силу того, что возвращаемое значение хранится в самом верхнем левом углу. ячейка результирующего набора строк
ExecuteNonQuery будет использоваться для запуска хранимых процедур базы данных, функций и запросов, которые изменяют данные (INSERT / UPDATE / DELETE) или изменяют структуру базы данных (CREATE TABLE ...). Обычно возвращаемое значение вызова является показателем того, сколько строк было затронуто операцией, но проверьте документацию БД, чтобы гарантировать это.
источник
ExecuteReader()
выполняет SQL-запрос, который возвращает объект поставщика данных DBDataReader, который обеспечивает доступ только для пересылки и только для чтения для результата запроса.ExecuteScalar()
аналогиченExecuteReader()
методу, разработанному для одноэлементного запроса, такого как получение количества записей.ExecuteNonQuery()
выполнить не запрос, который работает с созданием, удалением, обновлением, вставкой)источник
ExecuteNonQuery
Этот метод ExecuteNonQuery будет использоваться только для операторов insert, update и delete, Create и SET. Метод ExecuteNonQuery вернет количество строк, выполненных с помощью операций INSERT, DELETE или UPDATE.
ExecuteScalar
Получать отдельные значения из базы данных очень быстро. Execute Scalar вернет значение одиночной строки одиночного столбца, т.е. одиночное значение, при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. ExecuteReader
Execute Reader будет использоваться для возврата набора строк при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Этот метод предназначен для прямого извлечения записей и используется для чтения значений таблицы от первого до последнего.
источник
Метод ExecuteNonQuery вернет количество строк, выполненных с помощью операций INSERT, DELETE или UPDATE. Этот метод ExecuteNonQuery будет использоваться только для операторов insert, update и delete, Create и SET. (Читать далее)
ExecuteScalar вернет одиночное значение столбца строки, то есть одиночное значение, при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Получать отдельные значения из базы данных очень быстро. (Читать далее)
ExecuteReader будет использоваться для возврата набора строк при выполнении SQL-запроса или хранимой процедуры с использованием объекта команды. Этот метод предназначен для прямого извлечения записей и используется для чтения значений таблицы от первого до последнего. (Читать далее)
источник
ExecuteNonQuery: обычно используется, когда операторы Sql ничего не возвращают, например операции вставки, обновления и удаления.
ExecuteScalar:
Он будет использоваться, когда запрос Sql возвращает одно значение.
ExecuteReader
Он будет использоваться, когда запрос Sql или хранимая процедура возвращает несколько строк / столбцов.
для получения дополнительной информации щелкните здесь http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery
источник