C# İle SqlDataAdapter Kullanımı

23.10.2012 Hikmet Okumuş 12633 8 C#


SqlDataAdapter, veritabanı işlemlerinde en çok kullanılacak olan sınıflardan birisidir. Select sorgusu ile verileri DataSet ya da DataTable' a doldurmaktır. SqlDataAdapter nesnesini kullanmak için bir select sorgusuna ihtiyaç vardır.
        private void btnDataAdapter_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(BaglantiAdresi);
            SqlCommand cmd = new SqlCommand("SELECT * FROM Kisiler", con);
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);
        }
SqlDataAdapter nesnesinin SelectCommand özelliğine SqlCommand nesnesi setlenmektedir ve buna göre işlem gerçekleşmektedir. Dikkat edilmesi gereken en önemli noktalardan bir tanesi SqlConnection nesnesinin Open() ve Close() metodları kullanılmamıştır. Bunun nedeni SqlDataAdapter nesnesinin bu işlemi kendi içerisinde gerçekleştiriyor olmasıdır. SqlDataAdapter ile veri çekme işlemlerinde ayrıca bağlantıyı açma ve kapatma işlemlerini yapmak gerekmemektedir.
Yazımızın başında da belirttiğimiz gibi verileri doldurmak için DataSet ya da DataTable' a ihtiyacımız vardır. Doldurma işlemide SqlDataAdapter' ın Fill metodu ile yapılmaktadır.
SqlDataAdapter nesnesi genel olarak bu şekilde kullanılmaktadır.

Başarılar dilerim.


Kullanıcı Yorumları


hikmet okumuş makale yorum
melek nur koçyiğit
30.03.2014 22:52:25
data set kulanırken tabloları tutan dizi olarak düşünürsek farklı olarak tables [0] tables [1 ] diye bir ayrım yamamız söz konusumusudur bu ayrımı neye göre nasıl yaparız? string str = ConfigurationManager.ConnectionStrings[1].ConnectionString; SqlConnection con = new SqlConnection(str); DataSet ds = new DataSet(); SqlDataAdapter adap = new SqlDataAdapter("select * from kitap ", con); adap.Fill(ds); //"burada sadece ds demişken adap2 de tables [1 ] diye de belirtmiş ornegi denedim ikinciden tables [1] silince data grid 2 ye baglamıyor neden???" dataGridView1.DataSource = ds.Tables[0]; SqlDataAdapter adap2 = new SqlDataAdapter("select * from yazar ", con); ds.Tables.Add("yazar"); adap2.Fill(ds.Tables[1]); dataGridView2.DataSource = ds.Tables[1];
hikmet okumuş makale yorum
Hikmet Okumuş
31.03.2014 11:21:30
Merhaba melek nur koçyiğit, DataSet, içerisinde DataTable koleksiyonu barındıran bir yapıdır. DataSet içerisinde birden fazla tablo barındırmak mümkündür. Sizde muhtemelen DataSet içerisine birden fazla tablo ekleyip program içerisinde kullanmak istiyorsunuz. Bunu bir kaç farklı işlem ile yapabilirsiniz. Bir örnek ile açıklamaya çalışayım. SqlCommand cmd = new SqlCommand("SELECT * FROM Kisiler; SELECT * FROM Yazarlar", con); Command nesnesi içerisinde 2 adet sorgu belirttik. SqlDataAdapter ile Fill ettiğimiz zaman yukarıda bulunan 2 sorgununda sonucu belirttiğimiz DataSet içerisinde yer alacaktır. SqlCommand cmd = new SqlCommand("SELECT * FROM Kisiler; SELECT * FROM Yazarlar", con); SqlDataAdapter da = new SqlDataAdapter(cmd); da.TableMappings.Add("Table", "Kisiler"); da.TableMappings.Add("Table1", "Yazarlar"); DataSet ds = new DataSet(); da.Fill(ds); TableMappings ile DataSet içerisinde oluşacak tablo isimlerini belirtiyoruz. Belirtmek zorunda değiliz. Belirtmediğimizde tablo isimleri otomatik olarak isim alacaktır. Son satır çalıştığında DataSet içerisinde 2 adet tablo oluştuğu görülecektir. DataSet içerisinde yer alan tablolara erişmek için Tables koleksiyonundan tablonun index numarası ya da eğer bir tablo adı belirtildi ise tablo adı ile ulaşmak mümkündür.
hikmet okumuş makale yorum
melek nur koçyiğit
04.04.2014 23:41:49
teşekkürler
hikmet okumuş makale yorum
Hikmet Okumuş
05.04.2014 22:22:47
Rica ederim.
hikmet okumuş makale yorum
hakan
07.06.2014 12:10:35
Merhabalar aşagıdakı sql kodum çalışıyor amacım giris ile cıkıs arasındakı dakikayı bulmak bana bunu bu sql sorgu verdi takıldıgım yer c# forma bır turlu adapte edemedım amacım forma bir datapicker ile tarıh secip personel ismini secip dokumanı bu sql sorguya gore datagridwiem de getırmesı tesekkurler WITH rows AS ( select ROW_NUMBER() OVER (ORDER BY recordno) AS rn,recordno,persid,name,surname,gateno,gatename,olaybilgisi,gecisdate,gecistime from dbo.Transions where name = 'isim' and surname = 'soyad' and gecisdate = '06.03.2014' and gatename in ('TURNİKE 1 ÇIKIŞ','TURNİKE 1 GİRİŞ','TURNİKE 2 ÇIKIŞ','TURNİKE 2 GİRİŞ') ) SELECT mc.recordno,mc.persid,mc.name,mc.surname,mc.gateno,mc.gatename,mc.olaybilgisi,mc.gecisdate,mc.gecistime, DATEDIFF(minute, mc.gecistime, mp.gecistime) as sure_dakika FROM rows mc JOIN rows mp ON mc.rn = mp.rn - 1
hikmet okumuş makale yorum
Hikmet Okumuş
07.06.2014 19:48:52
Selamlar Hakan, Sql sorgun çalışıyorsa, C# tarafında bu sorguyu çağırman gerekmekte. Program içerisinde sorguna parametrelerini setleyek gönder ya da procedure ile parametrelerini göndererek çağır. Sonucu DataTable ya da DataSet olarak elde edebilirsin. Forma ekleyeceğin DateTimePicker ile gecisdate, seçtiğin personel bilgisini ise name ve surname alanlarına parametre olarak göndermen yeterli olacaktır. Sorundan bunları anladım. Dilerim faydalı olur.
hikmet okumuş makale yorum
Ersandemir
18.11.2014 21:19:31
Arkadaşlar Merhaba benim yapmak istediğim bir işlem var datagridview'e yazdıra biliyorum fakat gelen query sonucunu label a yazdıramıyorum. Query sonu sadece count edecek aynı aşağıdaki gibi bir quey; SqlConnection baglanti1 =new SqlConnection ("User ID=qwe;Password=123;Persist Security Info=True;Initial Catalog=STORE;Data Source=" + textBox1.Text); SqlCommand query = new SqlCommand ("SELECT ID FROM STORE_LOCATION WHERE STORE=" + comboBox2.SelectedItem + " AND TRANS_DATE BETWEEN '" + dateTimePicker3.Value + "' AND '" + dateTimePicker4.Value+"'"); if (baglanti1.State == ConnectionState.Closed) baglanti1.Open();
hikmet okumuş makale yorum
ekrem üstün
16.02.2015 01:02:21
bilgilendirmeniz için can-ı gönülden teşekkür ederim.


Yorum