Bu yazımızda Access veritabanındaki verilerin C# Windows Formda bulunan TreeView kontrolü içine nasıl çekilebileceği ile ilgili basit bir örnek yapacağız. Daha önce C# TreeView kullanımı konusunda TreeView kontrolünün ne işe yaradığını görmüştük. Konuya göz atmak isterseniz buradan ulaşabilirsiniz. Şimdi örneğimize geçelim.
Örneğimizde formumuza sadece TreeView kontrolü ekleyeceğiz ve Form_Load olayına yazacağımız kodlarla Form yüklendiğinde Access veritabanımızda bulunan tablo içindeki verilerin çekilmesini sağlayacağız.
dbKitap.accdb isminde oluşturduğumuz access dosyasını projemiz içindeki ../Bin/Debug klasörü altına kopyalayacağız.
Kullanacağımız access veritabanı dosyamıza ait Kitaplar tablosu aşağıdaki gibi olacaktır.
Kodlarımıza geçelim. İlk olarak veritabanı bağlantısı için aşağıdaki satırı ekleyelim.
1 2 3 | using System.Data.OleDb; |
Daha sonra global olarak bağlantımızı tanımlayalım.
1 2 3 | OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=dbKitap.accdb"); |
Verileri çekme işlemini bir metot ile gerçekleştireceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void Getir() { con.Open(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM Kitaplar",con); OleDbDataReader dr = cmd.ExecuteReader(); while(dr.Read()) { TreeNode node = new TreeNode(dr["kitap"].ToString()); node.Nodes.Add(dr["yazar"].ToString()); node.Nodes.Add(dr["sayfasayi"].ToString()); treeView1.Nodes.Add(node); } con.Close(); } |
Son olarak Form_Load olayına aşağıdaki kodları yazalım.
1 2 3 4 5 6 7 | private void Form1_Load(object sender, EventArgs e) { Getir(); } |
Kodlarımzın tamamı ve ekran görüntüsü aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb; namespace treeview_database { public partial class Form1 : Form { OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=dbKitap.accdb"); public Form1() { InitializeComponent(); } void Getir() { con.Open(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM Kitaplar",con); OleDbDataReader dr = cmd.ExecuteReader(); while(dr.Read()) { TreeNode node = new TreeNode(dr["kitap"].ToString()); node.Nodes.Add(dr["yazar"].ToString()); node.Nodes.Add(dr["sayfasayi"].ToString()); treeView1.Nodes.Add(node); } con.Close(); } private void Form1_Load(object sender, EventArgs e) { Getir(); } } } |
Ekran Çıktısı:
Örneği indirmek için TIKLA
Hocam veritabanından çekerken aynı kişinin kayıtlarını tek node altında toplamak istiyorum group by nasıl yapılır?
Örneğin “kişiler” ve “notlar” adında iki tablo olsun kullanman gereken sql sorgusu şöyle olmalıdır. “SELECT kisiler.*,notlar.not1 FROM kisiler, INNER JOIN notlar GROUP BY kisiler.id, kisiler.ad,kisiler.soyad
Bir şey daha soracağım;saçilen başlık ve altbaşlığı ayrı ayrı almak istiyorum.Örneğin yukarıdaki örnekteki gibi kitap adı ve yazarını ayrı ayrı nasıl alabilirim?Cevaplarsanız çok sevinirim