Jawaban:
Di sisi lain, itu:
Dengan biaya:
Jadi sebenarnya itu tergantung pada apa yang Anda lakukan, tapi saya cenderung lebih suka DataReader sampai saya membutuhkan sesuatu yang hanya didukung oleh dataset. SqlDataReader sempurna untuk kasus akses data umum yang mengikat ke kotak baca-saja.
Untuk info lebih lanjut, lihat dokumentasi resmi Microsoft .
while (reader.Read())loop Anda .
Jawabannya bisa sangat luas.
Pada dasarnya, perbedaan utama bagi saya yang biasanya mempengaruhi keputusan saya yang akan digunakan adalah bahwa dengan SQLDataReader, Anda "streaming" data dari database. Dengan SQLDataAdapter, Anda mengekstraksi data dari database ke objek yang dapat ditanyakan lebih lanjut, serta melakukan operasi CRUD.
Jelas dengan aliran data SQLDataReader JAUH lebih cepat, tetapi Anda hanya dapat memproses satu catatan pada suatu waktu. Dengan SQLDataAdapter, Anda memiliki koleksi lengkap baris yang cocok untuk permintaan Anda dari database untuk bekerja dengan / melewati kode Anda.
PERINGATAN: Jika Anda menggunakan SQLDataReader, SELALU, SELALU, SELALU pastikan Anda menulis kode yang tepat untuk menutup koneksi karena Anda menjaga koneksi tetap terbuka dengan SQLDataReader. Kegagalan untuk melakukan ini, atau penanganan kesalahan yang tepat untuk menutup koneksi jika terjadi kesalahan dalam memproses hasil akan CRIPPLE aplikasi Anda dengan kebocoran koneksi.
Maafkan VB saya, tetapi ini adalah jumlah minimum kode yang harus Anda miliki saat menggunakan SqlDataReader:
Using cn As New SqlConnection("..."), _
cmd As New SqlCommand("...", cn)
cn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
''# ...
End While
End Using
End Using
setara dengan C #:
using (var cn = new SqlConnection("..."))
using (var cmd = new SqlCommand("..."))
{
cn.Open();
using(var rdr = cmd.ExecuteReader())
{
while(rdr.Read())
{
//...
}
}
}
SqlDataAdapter biasanya digunakan untuk mengisi DataSet atau DataTable sehingga Anda akan memiliki akses ke data setelah koneksi Anda ditutup (akses terputus).
SqlDataReader adalah kursor hanya maju-maju dan terhubung yang cenderung lebih cepat daripada mengisi DataSet / DataTable.
Selain itu, dengan SqlDataReader, Anda menangani data satu catatan pada satu waktu, dan tidak menyimpan data apa pun di memori. Tentunya dengan DataTable atau DataSet, Anda memiliki overhead alokasi memori.
Jika Anda tidak perlu menyimpan data dalam memori, jadi untuk merender hal-hal saja, buka SqlDataReader. Jika Anda ingin menangani data Anda secara terputus, pilih DataAdapter untuk mengisi DataSet atau DataTable.
Gunakan SqlDataAdapter ketika ingin mengisi DataSet / DataTable di dalam memori dari database. Anda kemudian memiliki fleksibilitas untuk menutup / membuang koneksi, meneruskan data / set di memori. Anda kemudian dapat memanipulasi data dan bertahan kembali ke DB menggunakan adaptor data, bersama dengan InsertCommand / UpdateCommand.
Gunakan SqlDataReader ketika menginginkan akses data footprint cepat, memori rendah tanpa perlu fleksibilitas untuk misalnya menyampaikan data di sekitar logika bisnis Anda. Ini lebih optimal untuk pengambilan cepat, memori rendah, volume data besar karena tidak memuat semua data ke dalam memori semua dalam satu waktu - dengan pendekatan SqlDataAdapter, DataSet / DataTable akan diisi dengan semua data jadi jika ada banyak baris & kolom, yang akan membutuhkan banyak memori untuk disimpan.
Fungsi Fill menggunakan DataReader secara internal. Jika pertimbangan Anda adalah "Yang mana yang lebih efisien?", Kemudian menggunakan DataReader dalam lingkaran ketat yang mengisi kumpulan catatan-demi-catatan, kemungkinan menjadi beban yang sama pada sistem seperti menggunakan DataAdapter.Fill.
(System.Data.dll, System.Data.Common.DbDataAdapter, FillInternal.)