C# İle SqlDataAdapter Kullanımı


23 Ekim 2012 Hikmet Okumuş 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
3/30/2014 10:52:25 PM

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ş
3/31/2014 11:21:30 AM

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
4/4/2014 11:41:49 PM

teşekkürler

hikmet okumuş makale yorum
Hikmet Okumuş
4/5/2014 10:22:47 PM

Rica ederim.

hikmet okumuş makale yorum
hakan
6/7/2014 12:10:35 PM

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ş
6/7/2014 7:48:52 PM

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
11/18/2014 9:19:31 PM

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
2/16/2015 1:02:21 AM

bilgilendirmeniz için can-ı gönülden teşekkür ederim.

hikmet okumuş makale yorum
Hasan Karaduman
7/12/2018 4:37:59 PM

da.Fill(dt); // Bu komut ne işe yarıyor açıklayabilirmisiniz?



Yorum Ekle