Bu dersimizde 'sakli yordam' diye de adlandirilan stored procedure ile islem yapacagiz.
Stored porecedure ile çalismak aslinda isin kolayina kaçmaktir. Özetle söylemek gerekirse, SQL tarafina bize lazim olan sorguyu yaziyoruz, Visual Studio ortamindan da yalnizca ismi ile çagiriyoruz. Sorgularla, tirnaklarla, parantezlerle... debellesmemize gerek kalmayacak yani.
Lafi daha fazla uzatmadan hemen örneklerimize geçmek istiyorum.
Database olarak daha önceki makalelerimde de kullandigim “Okul” adli basit bir veri tabani kullanacagiz. Içinde “OgrenciKayit” adinda tek bir tablo var. Bu tabloda da ID, Ad, Soyad ve Sehir stunlari mevcut.
Bu kisa bilgiden sonra ilk örnegimize geçebiliriz artik.
Stored Procedure ile Select islemi:
SQL Server management studioyu açip bir stpred procedure olusturuyoruz.
create procedure S_OgrenciKayit as Select * from OgrenciKayit |
Bu query'yi çalistirdiktan sonra Okul adli veri tabanina ait 'programmability' klasöründeki 'Stored Procedures' klasöründe “S_OgrenciKayi” adinda stored procedure olusmus olacaktir.
Simdi Visual Studio'ya geçip programimizi açalim. Bir adet Gridview ve bir adet de 'listele' adinda buton ekleyelim. Butona basinca Gridview tablomuzdaki kayitlarla dolsun.
'baglantimizi kuruyoruz:
Dim CN As New SqlConnection("Integrated Security=SSPI;Initial Catalog=Okul;Data Source=.\SQLEXPRESS") CN.Open() |
'bir SqlCommand nesnesi olusturup parametre olarak stored procedure ve baglanti nesnesini veriyoruz:
Dim CMD As SqlCommand = New SqlCommand("S_OgrenciKayit", CN) 'SqlCommand nesnesi varsayilan olarak CommandtType.Text olarak gelir; bunu CommandType.StoredProcedure olarak degistiriyoruz: CMD.CommandType = CommandType.StoredProcedure 'DataAdapter vasitasiyla DataTable'yi dolduruyoruz ve Grid'e bagliyoruz: Dim DA As SqlDataAdapter = New SqlDataAdapter(CMD) Dim DT As DataTable = New DataTable DA.Fill(DT) DataGridView1.DataSource = DT CN.Close() |
Stored Procedure ile Delete islemi:
SQL tarafina söyle bir stored procedure olusturuyoruz:
Create proc D_OgrenciKayit ( @ID int ) as Delete from OgrenciKayit where ID=@ID |
Bu sorguyu çalistirdiktan sonra stored procemiz olusturulacaktir.
Gelelim kodlarimiza. Uygulamamiza bir adet 'sil' butonu bir adet de textbox ekliyoruz. Textbox'a silmek istedigimiz kaydin (ögrencinin) ID'sini yazip 'sil' butonuna basinca o kayit silinsin.
CMD = New SqlCommand("D_OgrenciKayit", CN) CMD.CommandType = CommandType.StoredProcedure CMD.Parameters.Add("@ID", SqlDbType.Int).Value = CType(TextBox1.Text, Integer) 'Textbox1'deki degeri integer'e çevirmemiz daha güvenli olacaktir. CN.Open() CMD.ExecuteNonQuery() ' ExecuteNonQuery() metodunu kullanmazsak islem gerçeklesmez! CN.Close() |
Silme isleminden sonra grid'deki bilgileri tazelemek için 'listele' butonuna basmayi unutmayin.
Stored Procedure ile insert islemi:
Bu da son derece basit bir islem. SQL tarafina geçip ihtiyacimiz olan stored porecdure'yi olusturuyoruz:
Create proc I_OgrenciKayit ( @Ad nvarchar(50), @Soyad nvarchar(50), @Sehir nvarchar(50) ) as insert into OgrenciKayit(Ad, Soyad, Sehir ) values (@Ad, @Soyad, @Sehir) |
Simdi üç adet textbox (txtAd, txtSoyad, txtSehir) ve bir tane 'yeni kayit' adinda buton ekliyoruz.
Butona basinca bu üç textbox'taki degeri tablomuza eklemis olacagiz. ID degeri zaten otomatikman SQL tarafindan veriliyor. Bunu tablomuzu olusturuken belirlemistik.
Kodlarimiz su sekilde:
CMD = New SqlCommand("I_OgrenciKayit", CN) CMD.CommandType = CommandType.StoredProcedure CMD.Parameters.Add("@Ad", SqlDbType.NVarChar, 50).Value = txtAd.Text CMD.Parameters.Add("@Soyad", SqlDbType.NVarChar, 50).Value = txtSoyad.Text CMD.Parameters.Add("@Sehir", SqlDbType.NVarChar, 50).Value = txtSehir.Text CN.Open() CMD.ExecuteNonQuery() CN.Close() |
özetlemek gerekirse; Olusturdugumuz stored procedure bizden üç adet parametre istiyor. Bu parametrelerin yerini (yani textbox'lari) belirtiyoruz ve SqlCommand nesnemizi ExecuteNonQuery() metodu ile çalistiriyoruz. Olay bundan ibaret.
Sorgumuz su sekilde:
Create proc [dbo].[U_OgrenciKayit]
(
@ID int,
@Ad nvarchar(50),
@Soyad nvarchar(50),
@Sehir Nvarchar(50)
)
as
update OgrenciKayit set Ad = @Ad, Soyad = @Soyad, Sehir = @Sehir
where ID = @ID
Islemlerimiz ise su sekilde:
CMD = New SqlCommand("U_OgrenciKayit", CN)
CMD.CommandType = CommandType.StoredProcedure
CMD.Parameters.Add("@ID", SqlDbType.Int).Value = txtID.Text
CMD.Parameters.Add("@Ad", SqlDbType.NVarChar, 50).Value = txtAd.Text
CMD.Parameters.Add("@Soyad", SqlDbType.NVarChar, 50).Value = txtSoyad.Text
CMD.Parameters.Add("@Sehir", SqlDbType.NVarChar, 50).Value = txtSehir.Text
CN.Open()
CMD.ExecuteNonQuery()
CN.Close()