Bu yazımızda C# ta ListBox’ta bulunan elemanların access veritabanına aktarılmasını sağlayan, yani listboxta toplu halde bulunan satırların veritabanına eklenmesini gerçekleştiren bir örnek oluşturacağız.
Listbox üzerinde birden fazla veri olabileceğinden Listbox’ta bulunan eleman sayısı üzerinden bir döngü oluşturarak kayıt ekleme işlemini gerçekleştireceğiz. Şimdi projemizde kullanacağımız veritabanı ve tablomuza bakalım.
vt.accdb isimli access veritabanı dosyamızı projemiz altında bulunan “…/Bin/Debug” klasörüne kopyalayalım. Projemizde bu veritabanındaki Kategori tablosunu kullanacağız. Kategori tablosunu aşağıdaki gibi oluşturuyoruz.
Tablomuzu incelediğimizde 2 alandan oluştuğunu görüyoruz. “id” alanının tipinin OtomatikSayı olduğunu görüyoruz. Yani kayıt eklem işleminde kullanacağımız sorguda id alanına ihtiyacımız olmayacak. Sadece “ad” alanına kayıtlarımızı yapacağız.
Şimdi Formumuzu tasarlıyoruz.
Burada ListBox’a Ekle Butonu textbox içine girilen değerlerin Listbox içine aktarılmasını sağlayacak. Listbox içinde elemanların veritabanına yani Kategori tablosuna eklenmesi işlemini gerçekleştirecek olan Button ise Veritabanına Ekle butonu olacak.
Şimdi kodlarımıza bakalım.
Öncelikli olarak veritabanı nesnelerimiz için gerekli olan aşağıdaki kütüphaneyi eklemeniz gerektiğini hatırlatalım.
1 2 3 | using System.Data.OleDb; |
Şimdi ListBox’a Ekle butonu için kodlarımızı yazalım;
1 2 3 4 5 6 7 8 9 10 | private void button1_Click(object sender, EventArgs e) { if(textBox1.Text!="") { listBox1.Items.Add(textBox1.Text); textBox1.Text = ""; } } |
Bu işlem sonucunda textbox kontrolünün içeriğinin girilmiş olması durumunda listbox içine eklenecek ve textbox içeriği yeni girişe hazır hale getirilmesi amacıyla temizlenecektir.
Şimdi de Veritabanı’ na Listbox öğelerinin aktarılması ve veritabanı bağlantılarının gerçekleştirildiği kodlarımıza bakalım.
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 | OleDbConnection con; OleDbCommand cmd; private void button2_Click(object sender, EventArgs e) { if(listBox1.Items.Count!=0) { string sql = "INSERT INTO Kategori (ad) VALUES(@ad)"; con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=vt.accdb"); foreach (string kategori in listBox1.Items) { cmd = new OleDbCommand(sql, con); cmd.Parameters.AddWithValue("@ad", kategori); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } MessageBox.Show("Kayıt Eklendi"); } else { MessageBox.Show("Listbox' ta Veri Yok"); } } |
Buradaki kodları incelediğimizde listBox kontrolünün içi boş olmaması durumunda veritabanına ekleme işlemi Foreach döngüsü kullanılarak yapılıyor. Kayıt işlemi sonucunda bir mesaj ile kullanıcı bilgilendiriliyor.
Projemizi çalıştırıp kontrol edelim.
Veritabanı Kategori Tablosu
Kodlarımızın tamamı 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 46 47 48 49 50 51 52 53 54 55 56 57 58 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace listboxVeriGonder { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if(textBox1.Text!="") { listBox1.Items.Add(textBox1.Text); textBox1.Text = ""; } } OleDbConnection con; OleDbCommand cmd; private void button2_Click(object sender, EventArgs e) { if(listBox1.Items.Count!=0) { string sql = "INSERT INTO Kategori (ad) VALUES(@ad)"; con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=vt.accdb"); foreach (string kategori in listBox1.Items) { cmd = new OleDbCommand(sql, con); cmd.Parameters.AddWithValue("@ad", kategori); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } MessageBox.Show("Kayıt Eklendi"); } else { MessageBox.Show("Listbox' ta Veri Yok"); } } } } |
Video:
access veri tabanına eklediğimiz listbox itemlerini , form açıldığında nasıl listboxta otomatik olarak gösterebiliriz? veri tabanına kaydettiklerini de sayfayı her açtığımda listelemek istiyorum.
Access de veritabanı kısa metin olarak ayarlandığı da calistirdim.ancak sayı olarak ayarladigimda hata veriyor nasıl düzeltebiliriz.
Tür dönüşümü yapın.
Bir örnekle açıklayabilir misiniz. Tür dönüşümlerini araştırdım ancak uygulayamadim yardımcı olursanız sevinirim
Sayı türündeki alanınaıza aşağıdaki şekilde ekleme yapabilirsiniz. Yukarıdaki örnek üzerinde;
cmd.Parameters.AddWithValue(“@ad”, Convert.ToInt32(kategori));
mesela adı soyadı kimlik gibi birden fazla eklemek için ne yapmalıyız?
Sql sorgusunu kac alan varsa ona göre düzenleyerek her listbox için kayit işlemini foreach dongusuyle gerçekleştirebilirsiniz.
cmd.ExecuteNonQuery();
aynısını yaptım bu satırda hata veriyor help me lütfen Ahmet bey
Sorgunuzda hata gorunuyor. Tekrar kontrol edin.
3 Listbox içinde sırayla araç türü ,araç markası ve araç modeli açılıyor.En son aşamada seçilen araç türünü veritabanıma nasıl kaydedebilirim.
listbox3 te seçili elemanı kisiler tablosuna eklemek için kodlar.
string sql = “INSERT INTO kisiler (ad) VALUES(@ad)”;
cmd = new OleDbCommand(sql, con);
cmd.Parameters.AddWithValue(“@ad”, listBox3.SelectedItem.ToString());
con.Open();
cmd.ExecuteNonQuery();
con.Close();