Apa perbedaan antara ExecuteScalar, ExecuteReader dan ExecuteNonQuery?

106

Apa perbedaan kasus ketika kita menggunakan ketiga ini? Di mana saya harus menggunakannya dan di mana tidak?

nektar
sumber
1
Saya menemukan artikel bagus ini di: webblogsforyou.com/…
immayankmodi

Jawaban:

190
  • ExecuteScalarbiasanya digunakan saat kueri Anda mengembalikan satu nilai. Jika mengembalikan lebih banyak, maka hasilnya adalah kolom pertama dari baris pertama. Contohnya mungkin SELECT @@IDENTITY AS 'Identity'.
  • ExecuteReaderdigunakan untuk hasil apa pun yang ditetapkan dengan beberapa baris / kolom (mis., SELECT col1, col2 from sometable).
  • ExecuteNonQuery biasanya digunakan untuk pernyataan SQL tanpa hasil (misalnya, UPDATE, INSERT, dll.).
Mark Wilkins
sumber
39
ExecuteNonQuerydapat mengembalikan jumlah baris yang terpengaruh.
Sangram Nandkhile
Saya pikir ExecuteNonQuery digunakan saat Anda perlu memanggil prosedur tersimpan yang akan mengembalikan kumpulan tabel.
Gogutz
ExecuteNonQuery juga berfungsi jika Anda memiliki pernyataan pengembalian dalam prosedur tersimpan. stackoverflow.com/questions/6210027/…
FrenkyB
40

ExecuteNonQuery ():

  1. hanya akan bekerja dengan Kueri Tindakan (Buat, Ubah, Lepas, Sisipkan, Perbarui, Hapus).
  2. Mengembalikan jumlah baris yang dipengaruhi oleh Query.
  3. Jenis pengembalian adalah int
  4. Nilai kembali adalah opsional dan dapat ditetapkan ke variabel integer.

ExecuteReader ():

  1. akan bekerja dengan Permintaan Tindakan dan Non-Tindakan (Pilih)
  2. Mengembalikan kumpulan baris yang dipilih oleh Query.
  3. Jenis pengembalian adalah DataReader.
  4. Nilai kembali adalah wajib dan harus ditetapkan ke objek DataReader lain.

ExecuteScalar ():

  1. akan bekerja dengan Kueri Non-Tindakan yang berisi fungsi agregat.
  2. Kembalikan nilai baris pertama dan kolom pertama dari hasil kueri.
  3. Jenis pengembalian adalah objek.
  4. Nilai kembali adalah wajib dan harus ditetapkan ke variabel jenis yang diperlukan.

URL Referensi:

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

umarali1981
sumber
38

Masing-masing adalah jenis eksekusi yang berbeda.

  • ExecuteScalar akan menjadi jenis kueri yang akan mengembalikan satu nilai.

    Contohnya akan mengembalikan id yang dihasilkan setelah memasukkan.

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

  • ExecuteReader memberi Anda pembaca data kembali yang akan memungkinkan Anda membaca semua kolom hasil secara berurutan.

    Contohnya akan menarik informasi profil untuk satu atau lebih pengguna.

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQuery adalah SQL apa pun yang tidak mengembalikan nilai, tetapi sebenarnya melakukan beberapa bentuk pekerjaan seperti menyisipkan menghapus atau memodifikasi sesuatu.

    Contohnya adalah memperbarui profil pengguna di database.

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

Brendan Enrick
sumber
1
Sepertinya Anda dapat menggunakan ExecuteReader untuk melakukan pekerjaan yang dilakukan oleh ExecuteScalar & ExecuteNonQuery, jadi mengapa menggunakan dua lainnya? ada keuntungan kinerja?
pengguna20358
Salah satu alasan untuk menghindari penggunaan ExecuteReader secara berlebihan adalah karena hal itu akan membuat pembaca tetap ada sampai Anda selesai menggunakannya. Dengan semua ini, Anda ingin mengetahui beberapa informasi spesifik tentang cara kerjanya untuk menggunakannya secara efektif. Apa yang saya uraikan di sini adalah beberapa pedoman yang bagus.
Brendan Enrick
9

Dari dokumen (catatan: MSDN adalah sumber daya yang berguna ketika Anda ingin tahu apa saja yang bisa dilakukan!):

ExecuteScalar

Gunakan metode ExecuteScalar untuk mengambil satu nilai (misalnya, nilai agregat) dari database. Ini memerlukan lebih sedikit kode daripada menggunakan metode ExecuteReader, lalu menjalankan operasi yang Anda perlukan untuk menghasilkan nilai tunggal menggunakan data yang dikembalikan oleh SqlDataReader.

ExecuteReader

Mengirimkan CommandText ke Sambungan dan membuat SqlDataReader.

... dan dari SqlDataReader ...

Menyediakan cara membaca aliran baris hanya-maju dari database SQL Server. Kelas ini tidak dapat diwariskan.

ExecuteNonQuery

Anda bisa menggunakan ExecuteNonQuery untuk melakukan operasi katalog (misalnya, membuat kueri struktur database atau membuat objek database seperti tabel), atau untuk mengubah data dalam database tanpa menggunakan DataSet dengan menjalankan pernyataan UPDATE, INSERT, atau DELETE.

Greg Beech
sumber
8

Untuk menambah apa yang orang lain posting:

ExecuteScalar secara konseptual mengembalikan kolom paling kiri dari baris pertama kumpulan hasil dari kueri; Anda bisa ExecuteScalar staf SELECT * FROM, tetapi Anda hanya akan mendapatkan sel pertama dari baris yang dihasilkan Biasanya digunakan untuk kueri yang mengembalikan satu nilai. Saya tidak 100% yakin tentang SQLServer tetapi di Oracle, Anda tidak menggunakannya untuk menjalankan FUNCTION (kode database yang mengembalikan nilai tunggal) dan mengharapkannya memberi Anda nilai kembali fungsi meskipun fungsi mengembalikan nilai tunggal. Namun, jika Anda menjalankan fungsi sebagai bagian dari kueri, misalnya SELECT SUBSTR ('abc', 1, 1) FROM DUAL maka itu akan memberikan nilai kembali berdasarkan fakta bahwa nilai kembali disimpan di paling kiri atas sel dari kumpulan baris yang dihasilkan

ExecuteNonQuery akan digunakan untuk menjalankan database yang tersimpan prosedur, fungsi dan query yang mengubah data (INSERT / UPDATE / DELETE) atau memodifikasi struktur database (CREATE TABLE ...). Biasanya nilai kembalian dari panggilan tersebut adalah indikasi berapa banyak baris yang terpengaruh oleh operasi tetapi periksa dokumentasi DB untuk menjamin ini.

Matt
sumber
4

ExecuteReader() menjalankan kueri SQL yang mengembalikan objek DBDataReader penyedia data yang menyediakan akses hanya maju dan hanya baca untuk hasil kueri.

ExecuteScalar()mirip dengan ExecuteReader()metode yang dirancang untuk kueri tunggal seperti memperoleh jumlah catatan.

ExecuteNonQuery() jalankan non query yang berfungsi dengan buat, hapus, perbarui, sisipkan)

Rogers
sumber
3

ExecuteNonQuery

Metode ExecuteNonQuery ini hanya akan digunakan untuk menyisipkan, memperbarui dan menghapus, Membuat, dan pernyataan SET. Metode ExecuteNonQuery akan mengembalikan jumlah baris yang dipengaruhi dengan operasi INSERT, DELETE atau UPDATE.

ExecuteScalar

Sangat cepat untuk mengambil nilai tunggal dari database. Execute Scalar akan mengembalikan nilai kolom tunggal baris tunggal yaitu nilai tunggal, pada eksekusi SQL Query atau prosedur Tersimpan menggunakan objek perintah. ExecuteReader

Execute Reader akan digunakan untuk mengembalikan kumpulan baris, pada eksekusi SQL Query atau prosedur Tersimpan menggunakan objek perintah. Yang ini hanya pengambilan rekaman ke depan dan digunakan untuk membaca nilai tabel dari awal hingga akhir.

Shailendra Mishra
sumber
3

Metode ExecuteNonQuery akan mengembalikan jumlah baris yang dipengaruhi dengan operasi INSERT, DELETE atau UPDATE. Metode ExecuteNonQuery ini hanya akan digunakan untuk menyisipkan, memperbarui dan menghapus, Membuat, dan pernyataan SET. (Baca lebih banyak)

ExecuteScalar akan mengembalikan nilai kolom tunggal baris tunggal yaitu nilai tunggal, pada eksekusi SQL Query atau prosedur Tersimpan menggunakan objek perintah. Sangat cepat untuk mengambil nilai tunggal dari database. (Baca lebih banyak)

ExecuteReader akan digunakan untuk mengembalikan kumpulan baris, pada eksekusi SQL Query atau prosedur Tersimpan menggunakan objek perintah. Yang ini hanya pengambilan rekaman ke depan dan digunakan untuk membaca nilai tabel dari awal hingga akhir. (Baca lebih banyak)

Zia Ur Rahman
sumber
1

ExecuteNonQuery: biasanya digunakan ketika tidak ada yang dikembalikan dari pernyataan Sql seperti operasi penyisipan, pembaruan, penghapusan.

cmd.ExcecuteNonQuery();

ExecuteScalar:

Ini akan digunakan ketika kueri Sql mengembalikan nilai tunggal.

Int b = cmd.ExcecuteScalar();

ExecuteReader

Ini akan digunakan ketika kueri Sql atau Prosedur Tersimpan mengembalikan beberapa baris / kolom

SqlDataReader dr = cmd.ExecuteReader();

untuk informasi lebih lanjut Anda dapat klik di sini http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

DotNetLover
sumber