Ana Sayfa > ADO.NET > Microsoft Visual Basic.NET ve ADO.NET ile SQL Server İşlemleri / 5

Microsoft Visual Basic.NET ve ADO.NET ile SQL Server İşlemleri / 5

30 Nisan 2010

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

 

style=background:#E6E6E6;border-collapse:collapse;border:none id="table53">
padding:7.1pt 7.1pt 7.1pt 7.1pt>

font-family:"Courier New">–Northwind veritabanını kullanıyoruz

font-family:"Courier New">USE Northwind

font-family:"Courier New">GO

font-family:"Courier New"> 

font-family:"Courier New">–udpInsertANewShipper adında bir SP varsa

font-family:"Courier New">–yenisini oluşturmadan önce varolanı siliyoruz

font-family:"Courier New">IF EXISTS (SELECT ROUTINE_NAME

font-family:"Courier New">    FROM INFORMATION_SCHEMA.ROUTINES

font-family:"Courier New">    WHERE ROUTINE_TYPE = PROCEDURE AND

font-family:"Courier New">    ROUTINE_NAME = udpInsertANewShipper)

font-family:"Courier New">    DROP PROCEDURE udpInsertANewShipper

font-family:"Courier New">GO

font-family:"Courier New"> 

font-family:"Courier New">–udpInsertANewShipper adlı SPyi oluşturuyoruz

font-family:"Courier New">CREATE PROCEDURE udpInsertANewShipper

font-family:"Courier New">    @CompanyName nchar(40),

font-family:"Courier New">    @Phone nvarchar (24),

font-family:"Courier New">    @Identity int OUT

font-family:"Courier New">AS

font-family:"Courier New">INSERT INTO Shippers (CompanyName, Phone)

font-family:"Courier New">    VALUES(@CompanyName, @Phone)

font-family:"Courier New">SET @Identity = SCOPE_IDENTITY()

font-family:"Courier New">GO

 

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

style=font-size:10.0pt;font-family:Verdana> src="http://www.yazgelistir.com/images/kadir/adonet/image014.jpg">

style=font-size:10.0pt;font-family:Verdana>Şekil 5:1 – Tasarım Görünümü

style=font-size:10.0pt;font-family:Verdana> 

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.

 

style=background:#E6E6E6;border-collapse:collapse;border:none id="table54">
padding:7.1pt 7.1pt 7.1pt 7.1pt>

font-family:"Courier New">    DataAdapter ve
DataSet nesnelerine

font-family:"Courier New">    form içindeki
prosedürlerden

font-family:"Courier New">    erişmek istediğimiz
için

font-family:"Courier New">    modül seviyesinde
tanımlıyoruz.

font-family:"Courier New">    Dim dap1 style=color:blue>As SqlDataAdapter

font-family:"Courier New">    Dim das1 style=color:blue>As DataSet

font-family:"Courier New"> 

font-family:"Courier New">    Sub Populate()

font-family:"Courier New">        Northwind
veritabanı bağlantısı

font-family:"Courier New">        Dim cnn1 style=color:blue>As SqlClient.SqlConnection = _

font-family:"Courier New">        New
SqlConnection("Data Source=(local);" & _

font-family:"Courier New">            "Integrated Security=SSPI;"
& _

font-family:"Courier New">            "Initial Catalog=northwind")

font-family:"Courier New"> 

font-family:"Courier New">        Yeni bir
DataAdapter nesnesi oluşturuyor

font-family:"Courier New">        ve
SelectCommand belirtiyoruz

font-family:"Courier New">        dap1 = New
SqlDataAdapter _

font-family:"Courier New">            ("SELECT ShipperID, CompanyName,
Phone " & _

font-family:"Courier New">            "FROM Shippers", _

font-family:"Courier New">            cnn1)

font-family:"Courier New"> 

font-family:"Courier New">        Oluşturduğumuz
DataAdapter nesnesi için

font-family:"Courier New">        UpdateCommand
özelliğini belirtiyoruz

font-family:"Courier New">        dap1.UpdateCommand = _

font-family:"Courier New">            New
SqlCommand _

font-family:"Courier New">                ("UPDATE Shippers "
& _

font-family:"Courier New">                "SET CompanyName =
@CompanyName, " & _

font-family:"Courier New">                "Phone = @Phone " &
_

font-family:"Courier New">                "WHERE ShipperID =
@ShipperID", _

font-family:"Courier New">                cnn1)

font-family:"Courier New"> 

font-family:"Courier New">        UpdateCommand
özelliğinin kullanacağı iki

font-family:"Courier New">        parametreyi
oluşturuyoruz

font-family:"Courier New">        dap1.UpdateCommand.Parameters.Add _

font-family:"Courier New">            ("@CompanyName",
SqlDbType.NVarChar, 40, _

font-family:"Courier New">            "CompanyName")

font-family:"Courier New">        dap1.UpdateCommand.Parameters.Add _

font-family:"Courier New">            ("@Phone",
SqlDbType.NVarChar, 24, _

font-family:"Courier New">            "Phone")

font-family:"Courier New"> 

font-family:"Courier New">        Hangi satırın
güncelleneceğini ShipperID alanına

font-family:"Courier New">        göre
belirleyeceğiz. Shippers tablosundaki orijinal

font-family:"Courier New">        ShipperID
değerini kullanıyoruz

font-family:"Courier New">        Dim prm1 style=color:blue>As SqlParameter = _

font-family:"Courier New">            dap1.UpdateCommand.Parameters.Add _

font-family:"Courier New">            ("@ShipperID",
SqlDbType.Int)

font-family:"Courier New">        prm1.SourceColumn = "ShipperID"

font-family:"Courier New">        prm1.SourceVersion =
DataRowVersion.Original

font-family:"Courier New"> 

font-family:"Courier New">        DataAdapter
nesnesinin InsertCommand özelliğinde

font-family:"Courier New">        bir SQL ifadesi
değil, oluşturduğumuz Stored Procedureu

font-family:"Courier New">        kullanacağız.
Bu nedenle DataAdapter nesnesinin InsertCommand

font-family:"Courier New">        özelliğinin
CommandType değerinin CommandType.StoredProcedure

font-family:"Courier New">        olarak
değiştiriyor ve kullanacağımız SPnin adını belirtiyoruz

font-family:"Courier New">        dap1.InsertCommand = style=color:blue>New SqlCommand("udpInsertANewShipper",
cnn1)

font-family:"Courier New">        dap1.InsertCommand.CommandType =
CommandType.StoredProcedure

font-family:"Courier New"> 

font-family:"Courier New">        Kullanacağımız
SP için parametreleri belirtiyoruz

font-family:"Courier New">        dap1.InsertCommand.Parameters.Add _

font-family:"Courier New">            ("@CompanyName",
SqlDbType.NVarChar, 40, _

font-family:"Courier New">            "CompanyName")

font-family:"Courier New">        dap1.InsertCommand.Parameters.Add _

font-family:"Courier New">            ("@Phone",
SqlDbType.NVarChar, 24, _

font-family:"Courier New">            "Phone")

font-family:"Courier New"> 

font-family:"Courier New">        Hangi satırın
güncelleneceğini yine ShipperID

font-family:"Courier New">        alanına göre
belirliyoruz

font-family:"Courier New">        Dim prm2 style=color:blue>As SqlParameter = _

font-family:"Courier New">            dap1.InsertCommand.Parameters.Add _

font-family:"Courier New">             ("@Identity",
SqlDbType.Int, 0, "ShipperID")

font-family:"Courier New">        prm2.Direction = ParameterDirection.Output

font-family:"Courier New"> 

font-family:"Courier New">        DataAdapter
nesnemizin DeleteCommand özelliğine

font-family:"Courier New">        değer veriyoruz

font-family:"Courier New">        dap1.DeleteCommand = _

font-family:"Courier New">            New
SqlCommand("DELETE " & _

font-family:"Courier New">            "FROM Shippers " & _

font-family:"Courier New">            "WHERE ShipperID =
@ShipperID", cnn1)

font-family:"Courier New"> 

font-family:"Courier New">        Hangi satırın
silineceğini yine Shippers tablosundaki

font-family:"Courier New">        ShipperID
alanına göre belirleyeceğiz

font-family:"Courier New">        DeleteCommand
özelliği için kullanacağımız tek parametre

font-family:"Courier New">        olan
ShipperIDyi tanımlıyoruz

font-family:"Courier New">        Dim prm3 style=color:blue>As SqlParameter = _

font-family:"Courier New">            dap1.DeleteCommand.Parameters.Add _

font-family:"Courier New">            ("@ShipperID",
SqlDbType.Int)

font-family:"Courier New">        prm3.SourceColumn = "ShipperID"

font-family:"Courier New">        prm3.SourceVersion =
DataRowVersion.Original

font-family:"Courier New"> 

font-family:"Courier New">        Bağlantıyı
açıyoruz

font-family:"Courier New">        cnn1.Open()

font-family:"Courier New"> 

font-family:"Courier New">        DataAdapter
nesnesini kullanarak

font-family:"Courier New">        Oluşturduğumuz
DataSet içinde Shippers adlı

font-family:"Courier New">        DataTablea
verileri aktarıyoruz.

font-family:"Courier New">        das1 = New
DataSet

font-family:"Courier New">        dap1.Fill(das1, "Shippers")

font-family:"Courier New"> 

font-family:"Courier New">        DataSet nesnesi
ile çalışmak için

font-family:"Courier New">        açık bir
bağlantıya ihtiyacımız yok

font-family:"Courier New">        cnn1.Close()

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New";color:blue> 

font-family:"Courier New">    ### FORM YÜKLENİYOR
###

font-family:"Courier New">    Private style=color:blue>Sub Form1_Load(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles style=color:blue>MyBase.Load

font-family:"Courier New">        Form
yüklenirken verileri DataSete aktarıyoruz

font-family:"Courier New">        Populate()

font-family:"Courier New"> 

font-family:"Courier New">        Form üzerindeki
metin kutularını ilgili

font-family:"Courier New">        alanlara
bağlıyoruz

font-family:"Courier New">        TextBox1.DataBindings.Add _

font-family:"Courier New">           (New
Binding("Text", das1, "Shippers.ShipperID"))

font-family:"Courier New">        TextBox2.DataBindings.Add _

font-family:"Courier New">           (New Binding("Text",
das1, "Shippers.CompanyName"))

font-family:"Courier New">        TextBox3.DataBindings.Add _

font-family:"Courier New">           (New
Binding("Text", das1, "Shippers.Phone"))

font-family:"Courier New"> 

font-family:"Courier New">        textbox1i
read-only hale getiriyoruz

font-family:"Courier New">        TextBox1.ReadOnly = style=color:blue>True

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    ### NAVİGASYON BUTONLARI
###

font-family:"Courier New">    Private style=color:blue>Sub Button1_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button1.Click

font-family:"Courier New">        İlk kayıda
gidiyoruz

font-family:"Courier New">        Me.BindingContext(das1,
"Shippers").Position _

font-family:"Courier New">            = Me.BindingContext(das1,
"Shippers").Position.MinValue

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    Private style=color:blue>Sub Button2_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button2.Click

font-family:"Courier New">        Bir önceki
kayıda gidiyoruz

font-family:"Courier New">        Me.BindingContext(das1,
"Shippers").Position -= 1

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    Private style=color:blue>Sub Button3_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button3.Click

font-family:"Courier New">        Bir sonraki
kayıda gidiyoruz

font-family:"Courier New">        Me.BindingContext(das1,
"Shippers").Position += 1

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    Private style=color:blue>Sub Button4_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button4.Click

font-family:"Courier New">        Son kayıda
gidiyoruz

font-family:"Courier New">        Me.BindingContext(das1,
"Shippers").Position _

font-family:"Courier New">            = Me.BindingContext(das1,
"Shippers").Position.MaxValue

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    ### GÜNCELLE ###

font-family:"Courier New">    Private style=color:blue>Sub Button5_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button5.Click

font-family:"Courier New">        DataTable
içinde farklı bir satıra giderek yapılan

font-family:"Courier New">        değişikliği
geçerli hale getiriyoruz

font-family:"Courier New">        If style=color:blue>Me.BindingContext(das1,
"Shippers").Position = 0 Then

font-family:"Courier New">            Me.BindingContext(das1,
"Shippers").Position -= 1

font-family:"Courier New">        Else

font-family:"Courier New">            Me.BindingContext(das1,
"Shippers").Position -= 1

font-family:"Courier New">            Me.BindingContext(das1,
"Shippers").Position += 1

font-family:"Courier New">        End style=color:blue>If

font-family:"Courier New";color:blue> 

font-family:"Courier New">        DataAdapter
nesnesinin Update metodunu kullanarak

font-family:"Courier New">        local verileri
veri kaynağı ile güncelliyoruz

font-family:"Courier New">        dap1.Update(das1, "Shippers")

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    ### TEMİZLE VE YENİ
KAYIT EKLE ###

font-family:"Courier New";color:green> 

font-family:"Courier New">    Private style=color:blue>Sub Button6_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button6.Click

font-family:"Courier New">        Eklenen satırı
daha sonradan güncelleyebilmek için

font-family:"Courier New">        İlk satıra
gidiyoruz

font-family:"Courier New">        Me.BindingContext(das1,
"Shippers").Position _

font-family:"Courier New">            = Me.BindingContext(das1,
"Shippers").Position.MinValue

font-family:"Courier New"> 

font-family:"Courier New">        Metin kutuları
için gerçekleştirdiğimiz

font-family:"Courier New">        veri
bağlantılarını kaldırıyoruz

font-family:"Courier New">        TextBox1.DataBindings.Clear()

font-family:"Courier New">        TextBox2.DataBindings.Clear()

font-family:"Courier New">        TextBox3.DataBindings.Clear()

font-family:"Courier New"> 

font-family:"Courier New">        Metin
kutularını temizliyoruz

font-family:"Courier New">        TextBox1.Text = ""

font-family:"Courier New">        TextBox2.Text = ""

font-family:"Courier New">        TextBox3.Text = ""

font-family:"Courier New">        Artık
uygulamamız yeni veri girişi için hazır durumda

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    Private style=color:blue>Sub Button7_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button7.Click

font-family:"Courier New">        Shippers
DataTableında yeni bir DataRow oluşturuyoruz

font-family:"Courier New">        ve değerlerini
form üzerindeki metin kutularından alıyoruz

font-family:"Courier New">        Dim newRow
As DataRow =
das1.Tables("Shippers").NewRow()

font-family:"Courier New">        newRow("CompanyName") =
TextBox2.Text

font-family:"Courier New">        newRow("Phone") = TextBox3.Text

font-family:"Courier New">       
das1.Tables("Shippers").Rows.Add(newRow)

font-family:"Courier New"> 

font-family:"Courier New">        Eklenen satırı
veri kaynağında geçerli hale getirmek için

font-family:"Courier New">        DataAdapter
nesnesinin Update metodunu kullanıyoruz

font-family:"Courier New">        dap1.Update(das1, "Shippers")

font-family:"Courier New"> 

font-family:"Courier New">        Metin
kutularından kaldırdığımız veri bağlantılarını

font-family:"Courier New">        yeniden
oluşturuyoruz

font-family:"Courier New">        TextBox1.DataBindings.Add _

font-family:"Courier New">           (New
Binding("Text", das1, "Shippers.ShipperID"))

font-family:"Courier New">        TextBox2.DataBindings.Add _

font-family:"Courier New">           (New
Binding("Text", das1, "Shippers.CompanyName"))

font-family:"Courier New">        TextBox3.DataBindings.Add _

font-family:"Courier New">           (New
Binding("Text", das1, "Shippers.Phone"))

font-family:"Courier New"> 

font-family:"Courier New">        Eklenen son
satırı görüntülemek için DataSet içindeki

font-family:"Courier New">        Shippers
DataTableının son satırına gidiyoruz

font-family:"Courier New">        Me.BindingContext(das1,
"Shippers").Position _

font-family:"Courier New">            = Me.BindingContext(das1,
"Shippers").Position.MaxValue

font-family:"Courier New">    End style=color:blue>Sub

font-family:"Courier New";color:blue> 

font-family:"Courier New">    ### SİL ###

font-family:"Courier New">    Private style=color:blue>Sub Button8_Click(ByVal
sender As System.Object, style=color:blue>ByVal e As
System.EventArgs) Handles Button8.Click

font-family:"Courier New">        DataSet
içindeki Shippers tablosuna

font-family:"Courier New">        dayanan bir
DataView oluşturuyoruz ve

font-family:"Courier New">        şu anda
bulunulan ShipperID ile eşleşen

font-family:"Courier New">        row indexini
buluyoruz

font-family:"Courier New">        Dim dav1 style=color:blue>As DataView = _

font-family:"Courier New">            New
DataView(das1.Tables("Shippers"))

font-family:"Courier New">        dav1.Sort = "ShipperID"

font-family:"Courier New">        Dim
rowIndex As Integer
= _

font-family:"Courier New">        dav1.Find(TextBox1.Text)

font-family:"Courier New"> 

font-family:"Courier New">        Bulunan satırı
silinmek üzere işaretliyoruz

font-family:"Courier New">       
das1.Tables("Shippers").Rows(rowIndex).Delete()

font-family:"Courier New"> 

font-family:"Courier New">        DataAdapter
nesnesinin Update metodunu kullanarak

font-family:"Courier New">        yaptığımız
işlemi SQL Server üzerinde ve DataSet

font-family:"Courier New">        üzerindeki
Shippers tablosunda geçerli hale getiriyoruz

font-family:"Courier New">        dap1.Update(das1, "Shippers")

    End Sub

 

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

style=font-size:10.0pt;font-family:Verdana> src="http://www.yazgelistir.com/images/kadir/adonet/image015.jpg">

style=font-size:10.0pt;font-family:Verdana>Şekil 5:2 – Uygulamamız Çalışıyor

 

Kaynaklar:…………….

style=font-size:10.0pt;font-family:Verdana>i.                   
MSDN style=font-size:10.0pt;font-family:Wingdings>J

style=font-size:10.0pt;font-family:Verdana>ii.                  
Kitaplar

style=font-size:10.0pt;font-family:Verdana>iii.                
Google

style=font-size:10.0pt;font-family:Verdana>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.

ADO.NET

  1. Henüz yorum yok.
  1. Henüz geri izleme yok.