Merhaba arkadaslar.
Bundan önceki iki dersimizde veritabanina nasil baglanacagimizi ve SqlCommand nesnesiyle nasil sorgu yapacagimizi ögrenmistik.
Bu dersimizde seçme (select), kaydetme (insert), güncelleme (update) ve silme (delete) islemelerinin nasil yapildigini ögrenecegiz insallah.
Kullancagimiz database, kendi olusturdugum Okul adinda basit bir veritabani. Ama siz dilerseniz kendi olusturdugunuz bir veritabanini da kullanabilirsiniz.
Kisa bir örnekle ilk iki dersin kisa bir özetini yapmak istiyorum önce. Ayrica seçme islemiyle de baslamis oluruz.
Kullanacagimiz tablonun adi OgrenciKayit. Bu tabloda 4 stun var: ID, Ad, Soyad, Sehir.
Formumuza ID için bir combobox, Ad, Soyad ve Sehir için de iki tane de textbox ekleyelim.
Combobox'un degerini degistirdigimizde textboxlar da degissin. Kisacasi seçtigimiz ID'ye ait bilgileri görecegiz.
Öncelikle uygulamamizin mantigini ve izleyecegimiz yolu bir belirleyelim:
1-) Veritabanimiza baglanmak icin bir SqlConnection nesnesi,
2-) Veritabanindaki bilgileri kullanmak (seçme, kaydetme, silme, güncelleme) için SqlCommand
3-) SqlCommand'in yapacagi islem için bir sorgu string'i (“SELECT * From Categories” gibi)
4-) Sanal bir tablo olusturmak için DataTable (Sanal tablo diyorum, çünkü veritabanindan istedigimiz tabloyu bir kerelik çekip, baglantisiz (disconnected) çalisacagiz. Performans açisinan biçilmis kaftandir bu metot.)
5-) Baglantisiz çalisabilmemizi saglayan, bir nevi köprü vazifesi yapan SqlDataAdapter (DataTable'yi doldurmak için)
6-) ve veriyi okuyacak bir SqlDataReader. Bu sayede textbox'larimizi dolduracagiz.
Imports System.Data.SqlClient
Public Class frmOkul Dim CN As New SqlConnection("Integrated Security=SSPI;Initial Catalog=Okul;Data Source=.\SQLEXPRESS") Dim CMD As SqlCommand Dim Sorgu As String = "" Dim DA As SqlDataAdapter Dim DT As DataTable Dim Islem As String = "düzelt" Dim Dreader As SqlDataReader
Malzemelerimiz bunlar.
Simdi yapacagimiz ilk is sayfa yüklendiginde combobox'u doldurmak olacak.
Bir metot yazalim:
Private Sub ComboBoxuDoldur() CN.Open() Sorgu = "SELECT ID, Ad, Soyad, Sehir FROM OgrenciKayit" CMD = New SqlCommand(Sorgu, CN) DA = New SqlDataAdapter(CMD) DT = New DataTable DA.Fill(DT) cboID.DataSource = DT cboID.DisplayMember = "ID" 'combobox'un aldigi deger cboID.ValueMember = "ID" 'combobox'un gösterdigi deger CN.Close() End Sub
ve sayfamiz yüklenirken bu metodu çagiralim:
Private Sub frmCategories_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBoxuDoldur() End Sub
Combobox'stan baska bir deger seçtigimizde:
Private Sub Combobox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboCategoryID.SelectedIndexChanged CN.Open() Sorgu = "SELECT ID,ad,soyad,sehir FROM OgrenciKayit WHERE ID= " & cboID.SelectedValue CMD = New SqlCommand(Sorgu, CN) Dreader = CMD.ExecuteReader Do While Dreader.Read txtAd.Text = Dreader("Ad").ToString txtSoyad.Text = Dreader("Soyad").ToString txtSehir.Text = Dreader("Sehir").ToString Loop CN.Close() End Sub
Textbox'lara da gerekli veriyi aktardik.
Su ana kadar yaptigimiz islem, OgrenciKayit tablosundan veri çekmek ve ilgili yerlere yazdirmak oldu.
Simdi yeni bir kaydin girilmesi için yapilacak islemlere bakalim. BtnYeni adinda bir buton ekleyip çift tiklayalim:
Private Sub btnYeni_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnYeni.Click cboID.SelectedIndex = 0 cboID.Visible = False Label1.Visible = False txtAd.Text = "" txtSoyad.Text = "" Islem = "yeni" End Sub
Burada kayda deger önemli bir sey yapmiyoruz. Yalniz, sayfamizin basinda tanimladigim Islem adli string degiskenine dikkat edin. Simdiki degeri "yeni" oldu. Sebebini az sonra açiklayacagim.
Simdi bir metotla silme, ekleme ve düzeltme islemlerini yapacagiz. Bu üç islemi ayri ayi metotlarla da yapabiliriz, ama ben bir metotla yapacagim.
Izleyecegimiz yola gelince; duruma göre SQL sorgumuzu yazacagiz ve isi SqlCommand nesnesine havale edecegiz. Bu özü bu kadar basit. Örnegin silme islemi için:
.
Sorgu = "DELETE FROM OgrenciKayit WHERE ID = " & cboID.SelectedValue CN.Open() Dim cmd As New SqlCommand(Sorgu, CN) OK = cmd.ExecuteNonQuery
Tabi ki bu kodlari bu hâliyle birakirsak olasi bütün hatalara açik oldugu için programimizin çökme ihtimali yüksek olacaktir. Kodlarimizi mutlaka try – cathc blogu arasina almamiz lazim. Ayrica yapilan islemlerden sonra kullaniciya da bilgilendirici bir mesaj verilmeli.
Iste programimizin bel kemigini olusturan metot:
Private Sub IslemYap() Dim OK As Integer = 0 If Islem = "sil" Then Sorgu = "DELETE FROM OgrenciKayit WHERE ID = " & cboID.SelectedValue Try If CN.State = ConnectionState.Closed Then CN.Open() End If Dim cmd As New SqlCommand(Sorgu, CN) OK = cmd.ExecuteNonQuery If OK = 1 Then Label1.Visible = True cboID.Visible = True ComboBoxuDoldur() txtAd.Text = "" txtSoyad.Text = "" txtSehir.Text = "" Islem = "düzelt" MessageBox.Show("1 kayit silindi") Else MessageBox.Show("Silme islemi gerçeklesmedi!.") End If Catch ex As Exception MessageBox.Show(ex.Message, ex.GetType.ToString) Finally CN.Close() End Try ElseIf Islem = "yeni" Then Sorgu = "insert into OgrenciKayit values ('" & txtAd.Text & "','" & txtSoyad.Text & "','" & txtSehir.Text & "')" Try If CN.State = ConnectionState.Closed Then CN.Open() End If Dim cmd As New SqlCommand(Sorgu, CN) OK = cmd.ExecuteNonQuery If OK = 1 Then Label1.Visible = True cboID.Visible = True ComboBoxuDoldur() Islem = "düzelt" MessageBox.Show("1 yeni kayit eklendi") Else MessageBox.Show("Yeni kayit yapilamadi!.") End If Catch ex As Exception MessageBox.Show(ex.Message, ex.GetType.ToString) Finally CN.Close() End Try ElseIf Islem = "düzelt" Then Sorgu = "Update OgrenciKayit set Ad='" & txtAd.Text & "', Soyad='" & txtSoyad.Text & "', Sehir='" & txtSehir.Text & "' WHERE ID=" & cboID.SelectedValue Try If CN.State = ConnectionState.Closed Then CN.Open() End If Dim cmd As New SqlCommand(Sorgu, CN) OK = cmd.ExecuteNonQuery If OK = 1 Then Label1.Visible = True cboID.Visible = True ComboBoxuDoldur() Islem = "düzelt" MessageBox.Show("1 kayit yenilendi/düzeltildi") Else MessageBox.Show("Yenileme islemei gerçeklesmedi!.") End If Catch ex As Exception MessageBox.Show(ex.Message, ex.GetType.ToString) Finally CN.Close() End Try End If End Sub
ve bu metodu Kaydet ve sil butonlariyla çagiriyoruz.
Akla söyle bir soru gelebilir: Program hangi islemi (sil, yeni, düzelt) yapacagini nereden biliyor? Iste bu sorunun cevabi Islem string'inde sakli.
Sil butonuna basinca islem="sil" oluyor, yeni butonuna basinca islem="yeni" oluyor; diger bütün durumlarda ise islem="düzelt" oluyor. Çünkü geriye baska bir ihtimal ve yapilacak baska bir is kalmiyor.
Formumuza son olarak bir de iptal butonu ekleyelim:
Private Sub btnIptal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIptal.Click Islem = "düzelt" Label1.Visible = True cboID.Visible = True End Sub
Ekstra izahat ve kodlarin tamami için forum sayfamizi ziyaret edebilirsiniz.
Bir sonraki dersimizde Visual Basic.NET ile Stored Procedure konusuna deginecegim insallah. Görüsmek üzere.
.
merhaba ben bir sorgu çagiracagim fakat sorgu 50 satir, bu satirlari tek bir belirteçle isaretlemem mümkün mü, yoksa her satirda + ve ” ile birlestirme mi yapmam gerekiyor?
Private Sub combobox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboID.SelectedIndexChanged
hata alan arkadaslar kodu su sekilde düzenleyebilirler.
baglan.Open()
Dim abc As String
abc = cmbad.SelectedValue.ToString
sql ="SELECT ad,soyad,yas FROM table1 WHERE ad=’"
& abc & "’"
Kaydet butonunun kodlarini forumda paylasabilir misin?
öncelikle emeginize saglik. Çok güzel bi anlatim olmus. Yalniz bende su an veri tabani baglantisi yapmaya çalisiyorum ama bi yerde takildim ve yapamiyorum. Ben kisaca anlatiyim.
Yurt otomasyonu yapmaya çalisiyorum. Ögrenci ekleme silme düzenleme yaptim sorunsuz çalisiyo fakat veli eklemeye gelince kaydet butonuna bastigimda sanki butona kod yazilmamis gibi islevsiz halde ne hata veriyo nede herhangi bi islem yapiyo.Sorunu da çözemedim anlayacaginiz 🙁 ve kaydetme yapamadigim için silme ve düznlemede yapamadim. Üstelik daha personel ekleme vs. yapcam yapabilirsem tabi..
Yardimlarinizi bekliyorum.
http://www.csharpnedir.com/articles/read/?id=251 iyi oku iyi uygula
"Sql içeren bir veri tabani…" Mevcut kayitlari olan bir veritabani mi yoksa normallestirilmesi yapilmis (hazir) bir veritabani mi lazim? Northwind var internetten indirebilirsin. Ingilizce.
Eger maksatin normallestirmeyi yapmayi ögrenmekse o baska bir hikâye. Ama istersen yardimci olabilirim.
sql içeren bi veri tabani basit bi ornek yapip yollaayabilirmisin
Sorgu = "SELECT ID,ad,soyad,sehir FROM OgrenciKayit WHERE ID=" & cboID.SelectedValue yerine Sorgu = "SELECT ID,ad,soyad,sehir FROM OgrenciKayit WHERE ID=’"+cboID.Selectedvalue+" yazarsak oluorr tesekkürlerr…
Ihsan, o zaman forumda tam olarak hangi satirda hata oldugunu belirtin de bana da kolaylik olsun.
Turgut un da dedigi gibi Dreader da hata var ahmet abicim.
Dreader = CMD.ExecuteReader
Bunu forum da bir tartisalim.
Turgut Kaplan, bu sekilde hatanin sebebini tahmin etmek zor. Istersen forum bölümünde daha ayritili anlat. Olmazsa baska bir yöntemle yapalim.
ahmet dreader da hata veriyor ndn acaba hatada iodatadreader felan yaziyo yardim ltfn
Güner Güler, eger makaledeki bilgiler yeterli degilse forum sayfamizda yardim etmeye çalisayim?
Benimde bu sene bitirmem gereken bir projem var ve bir yeri tamamlayamiyorum. Veritabanindaki bilgileri comboxla çekmem gerekiyor ve çekemiyorum. Sürekli hata veriyor. Yardimlarinizi bekliyorum
yayinladiginiz bilgiler çok güzel okulumda gördügüm görsel dersin benzeri ve sinavimada burdan çalisicam..
cok basarili bi calisma olmus cok tesekkur ederim ellerinize saglik