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
--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()
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", _
UpdateCommand özelliğinin kullanacağı iki
parametreyi oluşturuyoruz
dap1.UpdateCommand.Parameters.Add _
("@CompanyName", SqlDbType.NVarChar, 40, _
"CompanyName")
("@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 = _
("@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 _
Hangi satırın güncelleneceğini yine ShipperID
alanına göre belirliyoruz
Dim prm2 As SqlParameter = _
("@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 _
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
### 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
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
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
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.MaxValue
### 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
Else
End If
DataAdapter nesnesinin Update metodunu kullanarak
local verileri veri kaynağı ile güncelliyoruz
dap1.Update(das1, "Shippers")
### 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
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
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
Metin kutularından kaldırdığımız veri bağlantılarını
yeniden oluşturuyoruz
Eklenen son satırı görüntülemek için DataSet içindeki
Shippers DataTableının son satırına gidiyoruz
### 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()
yaptığımız işlemi SQL Server üzerinde ve DataSet
üzerindeki Shippers tablosunda geçerli hale getiriyoruz
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.