ExecuteScalar, ExecuteReader ve ExecuteNonQuery arasındaki fark nedir?


Yanıtlar:


191
  • ExecuteScalargenellikle sorgunuz tek bir değer döndürdüğünde kullanılır. Daha fazla döndürürse, sonuç ilk satırın ilk sütunudur. Bir örnek olabilir SELECT @@IDENTITY AS 'Identity'.
  • ExecuteReaderbirden çok satır / sütun içeren herhangi bir sonuç kümesi için kullanılır (örneğin, SELECT col1, col2 from sometable).
  • ExecuteNonQuery genellikle sonuç içermeyen SQL ifadeleri için kullanılır (örn. UPDATE, INSERT, vb.).

40
ExecuteNonQueryetkilenen satırların sayısını döndürebilir.
Sangram Nandkhile

Bir tablo koleksiyonunu döndürecek saklı yordamları çağırmanız gerektiğinde ExecuteNonQuery'nin kullanıldığını düşündüm.
Gogutz

ExecuteNonQuery, saklı yordamda return deyiminiz varsa da çalışır. stackoverflow.com/questions/6210027/…
FrenkyB

40

ExecuteNonQuery ():

  1. yalnızca Eylem Sorguları ile çalışır (Oluştur, Değiştir, Bırak, Ekle, Güncelle, Sil).
  2. Sorgudan etkilenen satır sayısını döndürür.
  3. Dönüş türü int
  4. Dönüş değeri isteğe bağlıdır ve bir tamsayı değişkenine atanabilir.

ExecuteReader ():

  1. İşlem ve İşlem Dışı Sorgularla çalışacak (Seçin)
  2. Sorgu tarafından seçilen satır koleksiyonunu döndürür.
  3. Dönüş türü DataReader'dır.
  4. Dönüş değeri zorunludur ve başka bir DataReader nesnesine atanmalıdır.

ExecuteScalar ():

  1. toplama işlevleri içeren Eylem Olmayan Sorgular ile çalışacaktır.
  2. Sorgu sonucunun ilk satırını ve ilk sütun değerini döndürür.
  3. Dönüş türü nesnedir.
  4. Dönüş değeri zorunludur ve gerekli türde bir değişkene atanmalıdır.

Referans URL:

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


38

Her biri farklı türde bir yürütmedir.

  • ExecuteScalar , tek bir değer döndürecek sorgu türü olacaktır.

    Bir örnek, ekledikten sonra oluşturulan bir kimliği döndürmektir.

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

  • ExecuteReader , sonuçların tüm sütunlarını her seferinde bir satırda okumanıza olanak tanıyan bir veri okuyucu sağlar.

    Bir örnek, bir veya daha fazla kullanıcı için profil bilgilerini almak olabilir.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery , değerleri döndürmeyen, ancak bir şeyi eklemek veya değiştirmek gibi bir tür iş gerçekleştiren herhangi bir SQL'dir .

    Veritabanındaki bir kullanıcının profilini güncellemek bir örnek olabilir.

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


1
Hem ExecuteScalar hem de ExecuteNonQuery tarafından yapılan işleri yapmak için ExecuteReader'ı kullanabilirsiniz, öyleyse neden diğer ikisini kullanasınız? herhangi bir performans avantajı var mı?
user20358

ExecuteReader'ı aşırı kullanmaktan kaçınmanın bir nedeni, işiniz bitene kadar bu okuyucuyu etrafta tutmasıdır. Tüm bunlarla birlikte, onları en etkili şekilde kullanmak için nasıl çalıştıkları hakkında bazı özel bilgiler bilmek istersiniz. Burada özetlediklerim bazı iyi yönergelerdir.
Brendan Enrick

9

Dokümanlardan (not: MSDN, işlerin ne işe yaradığını bilmek istediğinizde kullanışlı bir kaynaktır!):

ExecuteScalar

Bir veritabanından tek bir değer (örneğin, bir toplama değeri) almak için ExecuteScalar yöntemini kullanın. Bu, ExecuteReader yöntemini kullanmaktan daha az kod gerektirir ve ardından SqlDataReader tarafından döndürülen verileri kullanarak tek bir değer oluşturmak için ihtiyaç duyduğunuz işlemleri gerçekleştirir.

ExecuteReader

CommandText'i Bağlantıya gönderir ve bir SqlDataReader oluşturur.

... ve SqlDataReader'dan ...

Bir SQL Server veritabanından yalnızca ileriye dönük satır akışını okumak için bir yol sağlar. Bu sınıf miras alınamaz.

ExecuteNonQuery

ExecuteNonQuery'yi katalog işlemlerini gerçekleştirmek (örneğin, bir veritabanının yapısını sorgulamak veya tablolar gibi veritabanı nesneleri oluşturmak) veya UPDATE, INSERT veya DELETE ifadelerini çalıştırarak bir DataSet kullanmadan bir veritabanındaki verileri değiştirmek için kullanabilirsiniz.


8

Başkalarının yayınladıklarına eklemek için:

ExecuteScalar kavramsal olarak sorgudaki sonuç kümesinin ilk satırından en soldaki sütunu döndürür; bir SELECT * FROM personelden ExecuteScalar yapabilirsiniz, ancak sonuçta ortaya çıkan satırların yalnızca ilk hücresini alırsınız. Genellikle tek bir değer döndüren sorgular için kullanılır. Ben SQLServer hakkında% 100 emin değilim ama Oracle'da, sen olmaz bir FUNCTION (veritabanı kodu döndürür tek bir değer olduğunu) çalıştırmak için kullanabilirsiniz ve size fonksiyonları tek değerleri döndürür rağmen işlevin dönüş değeri vermek için bekliyoruz. Bununla birlikte, işlevi bir sorgunun parçası olarak çalıştırıyorsanız, örneğin ÇİFTTEN ALTSTR ('abc', 1, 1) SEÇİN, bu durumda dönüş değerinin en sol üstte saklanması nedeniyle dönüş değeri verecektir. ortaya çıkan satır kümesinin hücresi

ExecuteNonQuery, verileri değiştiren (INSERT / UPDATE / DELETE) veya veritabanı yapısını değiştiren (CREATE TABLE ...) veritabanında depolanan prosedürleri, işlevleri ve sorguları çalıştırmak için kullanılır. Tipik olarak çağrının dönüş değeri, işlemden kaç satırın etkilendiğinin bir göstergesidir, ancak bunu garanti etmek için DB belgelerini kontrol edin


4

ExecuteReader() sorgu sonucu için yalnızca ileri ve salt okunur erişim sağlayan veri sağlayıcı DBDataReader nesnesini döndüren bir SQL sorgusu yürütür.

ExecuteScalar()ExecuteReader()kayıt sayısı elde etmek gibi tekli sorgu için tasarlanmış yönteme benzer .

ExecuteNonQuery() oluşturma, silme, güncelleme, ekleme ile çalışan sorgu dışı yürütme


3

ExecuteNonQuery

Bu ExecuteNonQuery yöntemi yalnızca ekleme, güncelleme ve silme, Oluştur ve SET ifadeleri için kullanılacaktır. ExecuteNonQuery yöntemi, INSERT, DELETE veya UPDATE işlemlerinden etkilenen satır sayısını döndürür.

ExecuteScalar

Veritabanından tek değerleri almak çok hızlıdır. Execute Scalar, komut nesnesi kullanılarak SQL Sorgusu veya Depolanan prosedür çalıştırıldığında tek satırlık tek sütun değeri, yani tek değer döndürür. ExecuteReader

Yürütme Okuyucu, komut nesnesi kullanılarak SQL Sorgusu veya Depolanan yordam yürütülürken satır kümesini döndürmek için kullanılacaktır. Bu, yalnızca kayıtların ileri geri alınmasıdır ve tablo değerlerini ilkten sonuncuya okumak için kullanılır.


3

ExecuteNonQuery yöntemi, INSERT, DELETE veya UPDATE işlemlerinden etkilenen satır sayısını döndürür. Bu ExecuteNonQuery yöntemi yalnızca ekleme, güncelleme ve silme, Oluştur ve SET ifadeleri için kullanılacaktır. (Daha fazla oku)

ExecuteScalar, komut nesnesi kullanılarak SQL Sorgusu veya Depolanan yordamın yürütülmesi sırasında tek satırlık tek sütun değeri, yani tek değer döndürür. Veritabanından tek değerleri almak çok hızlıdır. (Daha fazla oku)

ExecuteReader, komut nesnesi kullanılarak SQL Sorgusu veya Depolanan prosedür yürütülürken satır kümesini döndürmek için kullanılacaktır. Bu, yalnızca kayıtların ileri geri alınmasıdır ve tablo değerlerini ilkten sonuncuya okumak için kullanılır. (Daha fazla oku)


1

ExecuteNonQuery: genellikle ekleme, güncelleme, silme işlemleri gibi Sql ifadelerinden döndürülen hiçbir şey olmadığında kullanılır.

cmd.ExcecuteNonQuery();

ExecuteScalar:

Sql sorgusu tek değer döndürdüğünde kullanılacaktır.

Int b = cmd.ExcecuteScalar();

ExecuteReader

Sql sorgusu veya Stored Procedure birden fazla satır / sütun döndürdüğünde kullanılacaktır.

SqlDataReader dr = cmd.ExecuteReader();

daha fazla bilgi için buraya tıklayabilirsiniz http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.