Microsoft Visual Basic.NET ve ADO.NET ile SQL Server İşlemleri / 5
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
Servera 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 procedureu oluşturarak başlayalım. Bu prosedür Shippers
tablosuna, aldığı CompanyName ve Phone parametrelerini ekleyen
bir INSERT INTO ifadesi içermektedir.
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.
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.