VB.net ile SQL Veritabani islemleri – 3 (select, insert, uptate, delete)

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.
.

17 thoughts on “VB.net ile SQL Veritabani islemleri – 3 (select, insert, uptate, delete)

  1. 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?

  2.  Private Sub combobox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboID.SelectedIndexChanged

            CN.Open()
            Sorgu = "SELECT ID,ad,soyad,sehir FROM OgrenciKayit WHERE ID=" & cboID.SelectedValue
            CMD = New SqlCommand(Sorgu, CN)
            Dreader = CMD.ExecuteRea
     
     
    cn.open da hata veriyor. açik durumu diye?
  3. 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 & "’"

     

  4.  ö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.

  5.  "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.

  6. 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…

  7. Turgut un da dedigi gibi Dreader da hata var ahmet abicim. 

     Dreader = CMD.ExecuteReader

    Bunu forum da bir tartisalim.

  8. Turgut Kaplan, bu sekilde hatanin sebebini tahmin etmek zor. Istersen forum bölümünde daha ayritili anlat. Olmazsa baska bir yöntemle yapalim. 

  9. 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

  10. yayinladiginiz bilgiler çok güzel okulumda gördügüm görsel dersin benzeri ve sinavimada burdan çalisicam..

g*g için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir