Makale Özeti

Bu bölümde veritabanı uygulamaları konusunda şu ana kadar değinmediğimiz veritabanına yeni kayıt ekleme, mevcut kayıtları düzenleme ve silme işlemlerini ele alıyor olacağız.

Makale

5- Verileri Düzenlemek, Silmek ve Oluşturmak

Bu bölümde veritabanı uygulamaları konusunda şu ana kadar değinmediğimiz veritabanına yeni kayıt ekleme, mevcut kayıtları düzenleme ve silme işlemlerini ele alıyor olacağız.

ADO.NET ile Veritabanı İşlemleri
Bu bölümde SQL Server’a veri eklemeyi, mevcut verileri düzenlemeyi ve silmeyi örnekleyen bir uygulama geliştireceğiz. İşlemlerimizi yine Northwind örnek veritabanı üzerinde gerçekleştiriyor olacağız. Örneğimizde yeni bazı işlemler göreceğimiz gibi şu ana kadar gördüğümüz konuları da kullanacağız. Bunun için işe udpInsertANewShipper adlı stored procedure’u oluşturarak başlayalım. Bu prosedür Shippers tablosuna, aldığı CompanyName ve Phone parametrelerini ekleyen bir INSERT INTO ifadesi içermektedir.

 

--Northwind veritabanını kullanıyoruz

USE Northwind

GO

 

--udpInsertANewShipper adında bir SP varsa

--yenisini oluşturmadan önce varolanı siliyoruz

IF EXISTS (SELECT ROUTINE_NAME

    FROM INFORMATION_SCHEMA.ROUTINES

    WHERE ROUTINE_TYPE = PROCEDURE AND

    ROUTINE_NAME = udpInsertANewShipper)

    DROP PROCEDURE udpInsertANewShipper

GO

 

--udpInsertANewShipper adlı SPyi oluşturuyoruz

CREATE PROCEDURE udpInsertANewShipper

    @CompanyName nchar(40),

    @Phone nvarchar (24),

    @Identity int OUT

AS

INSERT INTO Shippers (CompanyName, Phone)

    VALUES(@CompanyName, @Phone)

SET @Identity = SCOPE_IDENTITY()

GO

 

Uygulamamızın form tasarımı ise aşağıdaki gibidir:

Şekil 5:1 – Tasarım Görünümü

 

Navigasyon butonlarının hemen altında yer alan dört buton örneğimizin asıl konusu olan veritabanı kayıt/güncelleme ve silme işlemlerinin gerçekleştirilmesini sağlayacaktır. Bu butonlardan Temizle ve Ekle butonları birlikte çalışmaktadır. Temizle butonu yeni girişin yapılabilmesi için metin kutularını temizleyecektir.

 

Bu örneğide kodlarla birlikte açıklayacağız.

 

    DataAdapter ve DataSet nesnelerine

    form içindeki prosedürlerden

    erişmek istediğimiz için

    modül seviyesinde tanımlıyoruz.

    Dim dap1 As SqlDataAdapter

    Dim das1 As DataSet

 

    Sub Populate()

        Northwind veritabanı bağlantısı

        Dim cnn1 As SqlClient.SqlConnection = _

        New SqlConnection("Data Source=(local);" & _

            "Integrated Security=SSPI;" & _

            "Initial Catalog=northwind")

 

        Yeni bir DataAdapter nesnesi oluşturuyor

        ve SelectCommand belirtiyoruz

        dap1 = New SqlDataAdapter _

            ("SELECT ShipperID, CompanyName, Phone " & _

            "FROM Shippers", _

            cnn1)

 

        Oluşturduğumuz DataAdapter nesnesi için

        UpdateCommand özelliğini belirtiyoruz

        dap1.UpdateCommand = _

            New SqlCommand _

                ("UPDATE Shippers " & _

                "SET CompanyName = @CompanyName, " & _

                "Phone = @Phone " & _

                "WHERE ShipperID = @ShipperID", _

                cnn1)

 

        UpdateCommand özelliğinin kullanacağı iki

        parametreyi oluşturuyoruz

        dap1.UpdateCommand.Parameters.Add _

            ("@CompanyName", SqlDbType.NVarChar, 40, _

            "CompanyName")

        dap1.UpdateCommand.Parameters.Add _

            ("@Phone", SqlDbType.NVarChar, 24, _

            "Phone")

 

        Hangi satırın güncelleneceğini ShipperID alanına

        göre belirleyeceğiz. Shippers tablosundaki orijinal

        ShipperID değerini kullanıyoruz

        Dim prm1 As SqlParameter = _

            dap1.UpdateCommand.Parameters.Add _

            ("@ShipperID", SqlDbType.Int)

        prm1.SourceColumn = "ShipperID"

        prm1.SourceVersion = DataRowVersion.Original

 

        DataAdapter nesnesinin InsertCommand özelliğinde

        bir SQL ifadesi değil, oluşturduğumuz Stored Procedureu

        kullanacağız. Bu nedenle DataAdapter nesnesinin InsertCommand

        özelliğinin CommandType değerinin CommandType.StoredProcedure

        olarak değiştiriyor ve kullanacağımız SPnin adını belirtiyoruz

        dap1.InsertCommand = New SqlCommand("udpInsertANewShipper", cnn1)

        dap1.InsertCommand.CommandType = CommandType.StoredProcedure

 

        Kullanacağımız SP için parametreleri belirtiyoruz

        dap1.InsertCommand.Parameters.Add _

            ("@CompanyName", SqlDbType.NVarChar, 40, _

            "CompanyName")

        dap1.InsertCommand.Parameters.Add _

            ("@Phone", SqlDbType.NVarChar, 24, _

            "Phone")

 

        Hangi satırın güncelleneceğini yine ShipperID

        alanına göre belirliyoruz

        Dim prm2 As SqlParameter = _

            dap1.InsertCommand.Parameters.Add _

             ("@Identity", SqlDbType.Int, 0, "ShipperID")

        prm2.Direction = ParameterDirection.Output

 

        DataAdapter nesnemizin DeleteCommand özelliğine

        değer veriyoruz

        dap1.DeleteCommand = _

            New SqlCommand("DELETE " & _

            "FROM Shippers " & _

            "WHERE ShipperID = @ShipperID", cnn1)

 

        Hangi satırın silineceğini yine Shippers tablosundaki

        ShipperID alanına göre belirleyeceğiz

        DeleteCommand özelliği için kullanacağımız tek parametre

        olan ShipperIDyi tanımlıyoruz

        Dim prm3 As SqlParameter = _

            dap1.DeleteCommand.Parameters.Add _

            ("@ShipperID", SqlDbType.Int)

        prm3.SourceColumn = "ShipperID"

        prm3.SourceVersion = DataRowVersion.Original

 

        Bağlantıyı açıyoruz

        cnn1.Open()

 

        DataAdapter nesnesini kullanarak

        Oluşturduğumuz DataSet içinde Shippers adlı

        DataTablea verileri aktarıyoruz.

        das1 = New DataSet

        dap1.Fill(das1, "Shippers")

 

        DataSet nesnesi ile çalışmak için

        açık bir bağlantıya ihtiyacımız yok

        cnn1.Close()

    End Sub

 

 

    ### FORM YÜKLENİYOR ###

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Form yüklenirken verileri DataSete aktarıyoruz

        Populate()

 

        Form üzerindeki metin kutularını ilgili

        alanlara bağlıyoruz

        TextBox1.DataBindings.Add _

           (New Binding("Text", das1, "Shippers.ShipperID"))

        TextBox2.DataBindings.Add _

           (New Binding("Text", das1, "Shippers.CompanyName"))

        TextBox3.DataBindings.Add _

           (New Binding("Text", das1, "Shippers.Phone"))

 

        textbox1i read-only hale getiriyoruz

        TextBox1.ReadOnly = True

    End Sub

 

    ### NAVİGASYON BUTONLARI ###

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        İlk kayıda gidiyoruz

        Me.BindingContext(das1, "Shippers").Position _

            = Me.BindingContext(das1, "Shippers").Position.MinValue

    End Sub

 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Bir önceki kayıda gidiyoruz

        Me.BindingContext(das1, "Shippers").Position -= 1

    End Sub

 

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Bir sonraki kayıda gidiyoruz

        Me.BindingContext(das1, "Shippers").Position += 1

    End Sub

 

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Son kayıda gidiyoruz

        Me.BindingContext(das1, "Shippers").Position _

            = Me.BindingContext(das1, "Shippers").Position.MaxValue

    End Sub

 

    ### GÜNCELLE ###

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        DataTable içinde farklı bir satıra giderek yapılan

        değişikliği geçerli hale getiriyoruz

        If Me.BindingContext(das1, "Shippers").Position = 0 Then

            Me.BindingContext(das1, "Shippers").Position -= 1

        Else

            Me.BindingContext(das1, "Shippers").Position -= 1

            Me.BindingContext(das1, "Shippers").Position += 1

        End If

 

        DataAdapter nesnesinin Update metodunu kullanarak

        local verileri veri kaynağı ile güncelliyoruz

        dap1.Update(das1, "Shippers")

    End Sub

 

    ### TEMİZLE VE YENİ KAYIT EKLE ###

 

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        Eklenen satırı daha sonradan güncelleyebilmek için

        İlk satıra gidiyoruz

        Me.BindingContext(das1, "Shippers").Position _

            = Me.BindingContext(das1, "Shippers").Position.MinValue

 

        Metin kutuları için gerçekleştirdiğimiz

        veri bağlantılarını kaldırıyoruz

        TextBox1.DataBindings.Clear()

        TextBox2.DataBindings.Clear()

        TextBox3.DataBindings.Clear()

 

        Metin kutularını temizliyoruz

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

        Artık uygulamamız yeni veri girişi için hazır durumda

    End Sub

 

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        Shippers DataTableında yeni bir DataRow oluşturuyoruz

        ve değerlerini form üzerindeki metin kutularından alıyoruz

        Dim newRow As DataRow = das1.Tables("Shippers").NewRow()

        newRow("CompanyName") = TextBox2.Text

        newRow("Phone") = TextBox3.Text

        das1.Tables("Shippers").Rows.Add(newRow)

 

        Eklenen satırı veri kaynağında geçerli hale getirmek için

        DataAdapter nesnesinin Update metodunu kullanıyoruz

        dap1.Update(das1, "Shippers")

 

        Metin kutularından kaldırdığımız veri bağlantılarını

        yeniden oluşturuyoruz

        TextBox1.DataBindings.Add _

           (New Binding("Text", das1, "Shippers.ShipperID"))

        TextBox2.DataBindings.Add _

           (New Binding("Text", das1, "Shippers.CompanyName"))

        TextBox3.DataBindings.Add _

           (New Binding("Text", das1, "Shippers.Phone"))

 

        Eklenen son satırı görüntülemek için DataSet içindeki

        Shippers DataTableının son satırına gidiyoruz

        Me.BindingContext(das1, "Shippers").Position _

            = Me.BindingContext(das1, "Shippers").Position.MaxValue

    End Sub

 

    ### SİL ###

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

        DataSet içindeki Shippers tablosuna

        dayanan bir DataView oluşturuyoruz ve

        şu anda bulunulan ShipperID ile eşleşen

        row indexini buluyoruz

        Dim dav1 As DataView = _

            New DataView(das1.Tables("Shippers"))

        dav1.Sort = "ShipperID"

        Dim rowIndex As Integer = _

        dav1.Find(TextBox1.Text)

 

        Bulunan satırı silinmek üzere işaretliyoruz

        das1.Tables("Shippers").Rows(rowIndex).Delete()

 

        DataAdapter nesnesinin Update metodunu kullanarak

        yaptığımız işlemi SQL Server üzerinde ve DataSet

        üzerindeki Shippers tablosunda geçerli hale getiriyoruz

        dap1.Update(das1, "Shippers")

    End Sub

 

Uygulamamız çalışırken aşağıdaki gibi görünecektir..

Şekil 5:2 – Uygulamamız Çalışıyor

 

Kaynaklar:................

i.                    MSDN J

ii.                   Kitaplar

iii.                 Google

iv.                Ben

 

Dokumanı yukarıdaki kaynaklardan derlediğim bilgilerle oluşturdum. Farklı kaynaklarda bulunan dokumanların derlemesi olarak görebiliriz, tabi bir artısı da Türkçe olması.

Faydalı olacağını umuyorum.