C# Access Veritabanı Bağlantısı [DEV KONU]

cimbomenes1905

Uzman üye
1 Eyl 2014
1,854
1
127.0.0.1
Merhabalar herkese, bugünkü makalemiz access ile veritabanı bağlantısı yapmaktır. Bağlantıyı yapmak için Office programlarından access'e sahip olmalısınız. Bu konuda Visual Studio 2015 Community Access 2016 Kullanılmıştır.

İlk olarak accessi açalım. Böyle bir ekran ile karşılaşacaksınız.

1VNG4p.png


Boş masaüstü veritabanı'na basıp Veritabanı ismimizi oluşturuyoruz.

adX1o5.png


Ben ThtdbExample adında veritabanı(datebase) ismini oluşturdum şimdi sıra tablo(tables) isim vermeye geldi.

1VNGrA.png


Yuvarlak içine aldığımız yerde (tabi sizde tablo1 yazacaktır.) üstüne gelip sağ tık ile tasarım görünümü yazısına tıklayıp tablo adını belirliyoruz.Ben ogrencı yaptım. Ve karşımıza çıkan sütunları(column) dolduracağız. Bunlar Tablonun içindeki sütunlardır.

MokaoM.png


Şeklinde dolduruyoruz. Size kalmış birşeydir. Burdaki örnekler ThtdbExample adlı databasenin ogrencı tablosunun ogr_no, ogr_adsoyad, ogr_snf sütunlarına göre anlatılacaktır. Sütunları doldurduktan sonra sağ kısımda bulunan tabloya basıp sağ tık ve kayıt ediyoruz. Artık sutünları ekledik son olarak veri eklemek kaldı.

Üst kısımda tablo adınız yazmaktadır. Ordan da kayıt edebilirsiniz. Üst kısımda bulunan (tablo isminiz) sağ tık yapıp sütun düzenleme yerinden çıkalım ve sağ kısımda bulunan ogrencı (tablo adınız) yere çift tıklayalım. Böyle bir ekran ile karşılaşacaksınız.

PnQO16.png


Burdan isterseniz veri ekleyebilirsiniz. Burdaki kimlik id olmaktadır ve veri eklendiğinde otomatik artmaktadır. Daha detaylı access anlatmak istemiyorum konu çok uzuyacak buraya kadar temel access mantığını kavranmış bulunmaktasınız artık veritabanınız hazırdır. Visual Studio'yu açıp yeni form proje oluşturalım.

Resimde görüldüğü şekilde Toolboxdan araçlarımızı yerleştirelim.

3vApMO.png


+ 12 label
+ 4 buton
+ 4 Panel
+ 1 Datagridview
Bulunmaktadır. Artık form alanımızı oluşturduk datagridview veritabanınızda bulunan sütunları listelemeye yarayan araçtır. Paneller ise düzgün ve hizalı görünmesi için koydum.

~Veritabanı Bağlantısı Kurma~

Form alanımızın kod penceresini açalım. Ve biraz önceki oluşturduğunuz datebaseyi
Kod:
Belgeler\Visual Studio 2015\Projects\ThtDbExample\ThtDbExample\bin\Debug
Yani projenin bulunduğu yerin bin/debug içine atıyoruz. Benimki burda olduğu için ben buraya attım. Artık herşey hazırdır. Veritabanı bağlantısı yapalım.

İlk olarak using System.Data.OleDb; sınıfını ekleyelim.
Kod:
OleDbConnection baglan = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ThtDbExample.accdb");
Bu kod ile veritabanı bağlantısı yapılmaktadır. OleDbConnection access veritabanı bağlantısı yapmak için kullanılır baglan adındaki değişkene veritabanı bağlantısını aktarıyoruz.
Kod:
OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ThtDbExample.accdb"
Burdaki kod genelde ya ezberlenir yada Server exploer kısmından kopyalanır. Burda sadece ThtDbExample.accdb kısmını değiştirmelisiniz. Bu sizin Datebase isminizdir. evet veritabanı bağlantısı yapmış bulunmaktayız.

2njELd.png


Artık veri ekleme (insert), silme (delete), güncelleme (update) ve arama gibi işlemler yapabiliriz.
 
Moderatör tarafında düzenlendi:

cimbomenes1905

Uzman üye
1 Eyl 2014
1,854
1
127.0.0.1
DataGridView'de Veritabanında bulunan tabloların görülmesi

~DataGridView'de Veritabanında Bulunan Tabloların Görülmesi~

Evet arkadaşlar geri gelmiş bulunmaktayım. Veritabanınızda bulunan tabloları datagridview'e aktarmak için şu kodu veritabanı bağlantısı kodunu yazdığımız kodun altına yazıyoruz.
Kod:
private vo it  listele()
        {
           [COLOR="DeepSkyBlue"][B]// vo it birleşik olacaktır.
            //ogrenci tablosunu aktar. ve veritabanı bağlantısı kur.[/B][/COLOR]
            OleDbCommand cmd = new OleDbCommand("SELECT * FROM ogrencı", baglan);
            DataTable tablo = new DataTable();
            OleDbDataAdapter adaptor = new OleDbDataAdapter(cmd);
            adaptor.Fill(tablo);
            dataGridView1.DataSource = tablo;
        }
Burda OledbCommand kodu veritabanında sorgu yapmamızı sağlayan koddur update, insert, delete gibi. cmd adındaki değişkene aktarıyoruz. Select * From ogrencı ile ogrencı tablosundaki tüm sütunları çekmeyi sağlıyoruz. (* = tüm anlamına gelir.) DataTable veritabanı tablolarını tablo adındaki değişkene atıyoruz.

Ve OleDbDataAdapter ile sorguyu ilişkilendiriyoruz. ve bunu adaptorün içine aktarıyoruz. Son olarak adaptor.Fill(tablo) kısmında bulunan kod ile okunan dataları tabloya aktarıyoruz. ve son olarak datagridview üzerinde bunları gösteriyoruz.

Artık oluşturmuş olduğumuz listele metotu ile form ekranı açılır açılmaz listelenmesini sağlamak için form alanından bir alana tıklayıp
Kod:
listele();
şeklinde yazmalıyız form açılışta veritabanında bulunan colonları ve bilgileri listeleyecektir.

yNV90n.png


~Veritabanına Veri Ekleme~

Evet en can alıcı noktalarından birisine gelmiş bulunmaktayız. Form ekranında tasarlamış olduğumuz ekle bölümündeki Öğrenci Ekle butonuna tıklayalım.

Kod:
try
            {
                DataSet ds = new DataSet();
                [COLOR="DeepSkyBlue"][B]// Veritabanı bağlantısını açıyoruz.[/B][/COLOR]
                baglan.Open();
                [COLOR="deepskyblue"][B]// datasetin içini temizliyoruz.[/B][/COLOR]
                ds.Clear();
               [COLOR="SeaGreen"][B] // Bağlantı Yapıldıktan sonra ogrencı adındaki tablonun ogr_no, ogr_adsoyad, ogr_snf sütunlarına veri ekleyeceğimizi values diyerek
                // bu verileri sonra gireceğimizi söylüyoruz. ve en son olarak bağlanıyoruz. (@ işareti sonra girmek istiyorum verileri demektir.)[/B][/COLOR]
                OleDbCommand cmd = new OleDbCommand("INSERT INTO ogrencı (ogr_no, ogr_adsoyad, ogr_snf) VALUES (@ogr_no, @ogr_adsoyad, @ogr_snf)", baglan); [COLOR="RoyalBlue"][B]// baglan burda veritabanı bağlantısı değişkenidir. Veritabanı bağlantısını unutmayalım.[/B][/COLOR]
               [COLOR="SandyBrown"][B] // cmd(komut ekle) ile belirlediğimiz sütunlara Parameters.AddWithValue parametresi ile textboxlardan veri alıp eklettiriyoruz.[/B][/COLOR]
                cmd.Parameters.AddWithValue("@ogr_no", Convert.ToInt32(textBox2.Text)); [COLOR="DeepSkyBlue"][B]// ogrenci no textboxu[/B][/COLOR]
                cmd.Parameters.AddWithValue("@ogr_adsoyad", textBox1.Text); [COLOR="deepskyblue"][B]// ogrenci adsoyad textboxu[/B][/COLOR]
                cmd.Parameters.AddWithValue("@ogr_snf", textBox3.Text); [COLOR="deepskyblue"][B]// ogrenci sınıfı texboxu
                // Kayıt etmek için son kod[/B][/COLOR]
                cmd.ExecuteNonQuery();
                [COLOR="SandyBrown"][B]// veritabanı bağlantısını kesiyoruz.[/B][/COLOR]
                baglan.Close();
                [COLOR="sandybrown"][B]// ve listele diye metot oluşturmuştuk onu buraya ekliyerek yeni eklenen verinin görünmesini sağlıyoruz.[/B][/COLOR]
                listele();
                MessageBox.Show("Öğrenci Başarıyla Kayıt Edildi.");
            }
            catch (Exception ex)
            {
                [COLOR="DeepSkyBlue"][B]// eğer hata varsa ex'e aktarıp bunu mesaj şeklinde kullanıcıya sölüyoruz, ve veritabanı bağlantısını kapatıyoruz.[/B][/COLOR]
                MessageBox.Show(ex.Message);
                baglan.Close();
            }
Evet arkadaşlar konu fazla uzun olmasın diye saatlerce yazamyıcağım için kod blogunun içine ufak notlar yazdım ingilizcesi olan kişi bile bunların ne olduğunu hemen anlar try-catch kullanmamın sebebi bir hata oluştuğunda hatayı ekrana bastırmasıdır. Bu şekilde hatayı nerde yaptığını bulabilme oranınız artmaktadır. Bazı internet sitelerinde values den sonra @ogr_no tarzında değilde texbox gibi gibi şeklinde giriyor bu gösterdiğim metot ile daha kolay ve karmaşıklık yaratmadan veri eklemesi yapabilirsiniz.

vXZlZR.png


~Veritabanında Bulunan Veriyi Düzenleme~

Evet arkadaşlar form alanımızda düzenle Bölümündeki düzenle butonuna çift tıklayıp kodlarımızı girelim. Burdaki mantık kullanıcı ilk texboxa (öğrenci numarası yani) girdiği veriyi veritabanında aratıp diğer textboxlardaki veriler ile değiştirilmesi sağlanır. Mesela ogrencinin numarası: 17 AdıSoyadı: Ahmet sınıfı: 10 olan bir veriyi değiştirmek istiyor 17 ilk texboxa değişecek

öğrencini numarasını (17) giriyor ve diğer texboxlara da adını soyadını ve sınıf değerlerini girerek Önceki ahmet sınıf: 10 olan veri gibip texboxlara sonradan girilen veri eklenmiş oluyor. Yazılacak kodlar neredeyse ekleme ile aynı sadece birkaç fark vardır.

Kod:
try
            {
                DataSet ds = new DataSet();
                [COLOR="DeepSkyBlue"][B]// Veritabanı bağlantısını açıyoruz.[/B][/COLOR]
                baglan.Open();
                ds.Clear();
                [COLOR="SandyBrown"][B]// Burda update ile ogrenci adındaki tablodan ogr_adsoyad, ogr_snf adındaki sütunları düzenliyoruz. Where(nerede) ile hangi öğrencinin bilgileri olduğunu söylüyoruz.[/B][/COLOR]
                OleDbCommand cmd = new OleDbCommand("UPDATE ogrencı Set ogr_adsoyad=@ogr_adsoyad, ogr_snf=@ogr_snf WHERE ogr_no=@ogr_no", baglan);
                cmd.Parameters.AddWithValue("@ogr_adsoyad",textBox7.Text);[COLOR="DeepSkyBlue"][B] // Güncellenecek öğrencinin yeni adı[/B][/COLOR]
                cmd.Parameters.AddWithValue("@ogr_snf", textBox5.Text); [COLOR="deepskyblue"][B]// Güncellenecek öğrencinin yeni sınıfı[/B][/COLOR]
                cmd.Parameters.AddWithValue("@ogr_no", Convert.ToInt32(textBox6.Text)); [COLOR="deepskyblue"][B]// Hangi öğrencinin bilgileri güncellenecek [/B][/COLOR]
                [COLOR="Orange"][B]// cmd(komut ekle) ile belirlediğimiz sütunlara textboxlardan veri alıp eklettiriyoruz.[/B][/COLOR]
                cmd.ExecuteNonQuery();
                baglan.Close();
               [COLOR="SeaGreen"][B] // bağlantıyı kapatıp datagridi güncelliyoruz.[/B][/COLOR]
                listele();
                MessageBox.Show("Öğrenciye Ait Bilgiler Güncellendi.");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                baglan.Close();
            }
Gene try-catch ile yaptık ki hata olduğunda yakalayıp bildirsin diye. Konu uzun olmasın ve sıkılmayın diye kod aralarında anlattım özet bir şekilde. Burda values yok fark ederseniz bunun yerine = den sonra bazı kaynaklara göre direk texbox.text tarzı alıyor ama ben öyle yapamıyorum çünkü çok karmaşık ve düzensiz duruyor bu şekilde hem düzenli hemde daha kolay oluyor.

njEa3a.png
 

TurkHackAnkara

Katılımcı Üye
7 Haz 2016
607
4
Aynen
Öğrenci arama yerindeki 1. Textbox'a " ' DROP Table ogrenci -- " yaz " olmadan diğerlerini boş bırak ve eklemeye çalış. Bu durumda sql injection olur ve tablo silinir. Yedeğini alıp dene. Bunu engellemek için Entity Framework kullanabilirsin.
 

cimbomenes1905

Uzman üye
1 Eyl 2014
1,854
1
127.0.0.1
Veritabanında Bulunan Veriyi Silme

~Veritabanında Bulunan Veriyi Silme~

Form alanından Öğrenci sil bölümündeki öğrenci sil butonuna çift tıklayalım. Burdaki mantık çok basittir öğrenci numarası ile tablo belirlenir ve tablo tümüyle silinir.

Kod:
try
            {
                [COLOR="DeepSkyBlue"][B]// Veritabanı bağlantısı açılır.[/B][/COLOR]
                baglan.Open();
                [COLOR="SeaGreen"][B]// Delete from ile tablo tümüyle silinmektedir. Where(hangi tablo) ogr_no 'nun sütunundaki tablo diye özetleyebiliriz. Tabiki veriyi sonra gireceğimizi söylüyoruz. ve veritabanı bağlantısını da ekliyoruz son kısıma.[/B][/COLOR]
                OleDbCommand cmd = new OleDbCommand("DELETE FROM ogrencı WHERE ogr_no = @ogr_no", baglan);
                [COLOR="SandyBrown"][B]// Ve silinecek öğrencinin numarasını belirliyoruz.[/B][/COLOR]
                cmd.Parameters.AddWithValue("@ogr_no", Convert.ToInt32(textBox4.Text));
                cmd.ExecuteNonQuery();
                baglan.Close();
                listele();
                MessageBox.Show("Öğrenci Başarıyla Silindi.");
            }
            catch (Exception hata)
            {
                MessageBox.Show(hata.Message);
            }
        }

Texboxa girilen öğrenci numarasına ait tüm bilgiler silinecektir.

OVElD5.png



~Veritabanında Veri Bulma~

Textboxa girilen öğrenci numarası ile öğrenciyi Datagridview üzerinde göstereceğiz.

Kod:
try
            {
                [COLOR="SeaGreen"][B]// da adında oledbdataadapter oluşturduk. ve select from ile ogrencı tablosunun ogr_no sütunundaki texboxa girilen öğrenci numarasını arıyoruz like burda aramak demektir. [/B][/COLOR]
                OleDbDataAdapter da = new OleDbDataAdapter("Select * from ogrencı where ogr_no like '" + Convert.ToInt32(textBox8.Text) + "%'", baglan);
                ds = new DataSet();
                baglan.Open();
                da.Fill(ds, "ogrencı");
                [COLOR="DeepSkyBlue"][B]// ve bulduğun tabloları datagridview'de göster.[/B][/COLOR]
                dataGridView1.DataSource = ds.Tables["ogrencı"];
                baglan.Close();
            }
            catch (Exception hata)
            {
                MessageBox.Show(hata.Message);
                baglan.Close();
            }

Buda bu kadardır.

m4EDoV.png


Konu için çok emek harcadım sizden tek istediğim şey bu bilgilerden en iyi şekilde yararlanıp mantığını kavramanızdır. Konuda alıntı kısım yoktur. Hepsini kendim yazmış olup bu projeyi kendim kodladım. Projeyi isteyenler için paylaşacağım. Eğer hata veya anlamadığınız olur ise konu altına yazın eğer ki cevap alamaz iseniz pm atın bildiğimce cevaplarım. Kendinize iyi bakın.
 

k3~

Özel Üye
5 Eki 2015
2,980
21
Guzel konu eline saglik. C# ile veritabani uygulamalari yapmak isteyenler icin guzel bir kaynak olacaktir. Sabit..
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.