VB.NET ile SQL Veritabani islemleri – 4 (Stored Procedure)

 Visual Basic.NET ile SQL veri tabani islemleri hakkinda bundan önceki derslerimizdeki örneklerde stored procedure kullanmadan dogrudan SQL sorgulari yazarak islemler yapmistik. Ders-1Ders-2Ders-3

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()

 

 

 Stored Procedure hakkinda daha fazla bilgi için makale-1 ve makale-2‘den yararlanabilirsiniz. Kolay gelsin.
.

26 thoughts on “VB.NET ile SQL Veritabani islemleri – 4 (Stored Procedure)

  1. valla gölkte ararken sizin sitenizde buldum bu konuyu baska hicbir yerde neredeyde
    SQL Stored Procedure ile ilgili bir kaynak yok . Cok cok cok cok tesekkürler

  2. sen hangi bilgileri tutmak istedigini tek tek yaz, ben sana örnek bir veritabani çikarmaya çalisayim 

  3. benimde hastane otomosyonuna ihtiyacim var.proje ödevim yardimci olursaniz sevinirim . mail adresim:puyem@hotmail.com

  4. Ben yaptim sorunsuz çalisiyor.ama eksik anlatilan yerler var.mesela veritabanina baglanti daha kolay bir yöntemle yapilabilir.ayrica acemi kullanicilar için veri tabanina baglanma sekli bu sekilde gösterilmesi de yanlis.bu uygulama kendi bilgisayarindan baska biryerde çalismaz.

                baglan= WindowsApplication1.My.Settings.dershaneConnectionString

    seklinde baglanti sekli daha saglikli 😉

    kodlarin uygulamasini yapamayanlar mail atabilir.Örnek projeyi gönderebilirim. ayhanguvenc@msn.com  

  5. Merhaba,

    Oncellikle eline saglik Ahmet bey. Ben Bilgisayar Muhendisligi okuyorum ve projemi tamamlamam lazim . Ben bir okul icin bir veritabani (Database) dusunuyorum bu konuda bana yardimci olabilirmisin.

    zubair.mahsher@gmail.com

  6. Fatih kardes siteye hiç girmiyor galiba arkadaslar.

    Siz en iyisi ya kendiniz yapin yada baska bir yerden bulmaya çalisin…

  7. Fatih kardes banada hastane otomasyonu ile alis veris sitesini mail olarak atabilimisin rica etsem

    mail adresim:kgumus08@gmail.com

    çok acil lazim

  8.  valla mukemmel makaleler olmus tesekkur ediyorum tam istedigim seyler 😀 herkes sihirbazla yapiyor herseyi kod yazmak zevkli is?? bide parametre de takinti var sanirim bunlari query den yapsak daha kolay oluyor orada hem neyin ne oldugu acikca yaziyo tesekkur ediyorum makaleyi paylasanlara

  9.  Makale halinde aslinda çok daha güzel olur. Evet Fatih sen en iyisi makale halinde, herkesin anliyabilecegi bir dille yaz. En hayirlisi bu olur…

  10. merhaba fatih kardes bence arkadaslara mail atma sitde yayinlasinlar makale haline getir derim. ne dersin?

  11. HASTANE OTOMASYONUNU ISTEYEN ARKADASIM BANA MAIL AT BEN SANA YAPILMI OLARAK GÖNDERIM NASIL BISI  ISTERSEN OTOBÜS TERMINALI OTOMASYONUDA VAR VE ALIS VERIS SITESI DE VAR ELIMDE 50 YE YAKIN 3 KATMAN MIMARISI ILE YAPILMIS ÖRNEKLER VAR KAYNAK KODLARI VE VERI TANAI ILE BIRLIKDE  MESAJ AT BANA GÖNDERIM

  12. CommandType = CommandType.StoredProcedure 

    Burda sql command in bir store proc olduunu belirtiyoruz bunu yazmazsak yanlis olur he yazdiysan MsSql Server tarafinda bu strore proc un oldugundan emin ol 

  13. hastane otomasyou yapiyorum burdaki gibi procedur le yaptim ama baglanti yolunda hata veriyoo ne yapabilirim??anahtar sözcük desteklenmiyo dio

  14. Tesekkurler Ihsan kardesim.

    Hocanin düzeltmeleri olursa bizimle paylasirsin artik? 😉 

  15. Valla çok güzel anlatmissin ellerine saglik  abi…

    Ahmet abicim. Ben bu bütün SQL Islemleri serisini okulda hocaya göstericem 🙂 Kesin begenicek 🙂

     

TurkS için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir