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

Yazar: Kadir Sümerkent
Kategori: ADO.NET & Entity Framework
Eklenme Tarihi: 14.10.2007 01:45:16



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.

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.