Visual Basic.NET ile SQL veri tabani islemleri hakkinda bundan önceki derslerimizdeki örneklerde stored procedure kullanmadan dogrudan SQL sorgulari yazarak islemler yapmistik. Ders-1, Ders-2, Ders-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.
.
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
fatih hocam hastane otomasyonunu rica etsem bana da yollarmisin acil lazim son 1 hafta alper–1990@hotmail.com
sen hangi bilgileri tutmak istedigini tek tek yaz, ben sana örnek bir veritabani çikarmaya çalisayim
okuil veri tabani nasil olussturuluyor.bilen varsa bana yardimci olabilir mi ?
benimde hastane otomosyonuna ihtiyacim var.proje ödevim yardimci olursaniz sevinirim . mail adresim:puyem@hotmail.com
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
necatierol@windowslive.com
Fatih Hocam elindeki projeleri banada yollarmisin?
çok degerli programci arkadaslarim hastana otomasyonuna ihtiyacim var lütfen gödnerebilirmisiniz okul mezuniyet odewim lütfen yardim
ibrahim60tr@msn.com
fatih mutlu banada hastane otomasyonu lazm visual basic dilinde
gokhanucar070@hotmail.com yardimci olursan sevinirim (okul ödevi için)
yada hastane otomasyonu programi olan biri bana ulasrsa ii olur
Elimden geleni yaparim Zubair.
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
Fatih kardes siteye hiç girmiyor galiba arkadaslar.
Siz en iyisi ya kendiniz yapin yada baska bir yerden bulmaya çalisin…
Fatih kardes banada hastane otomasyonu ile alis veris sitesini mail olarak atabilimisin rica etsem
mail adresim:kgumus08@gmail.com
çok acil lazim
rca etsem bana da atabilirmisiniz hastane otomasyonunu ?
son_qozyaslarimsin@hotmail.com mail adresim
Fatih Mutlu.. bana ödevim için hastane otomasyonu programi lazim visualbasic diliyle yazilmis.. yardim olabilirsen gokhan-cakiroglu@hotmail.com msn adresim..
çok yardimci oldu makalaleriniz..tesekkürler
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
Makale halinde aslinda çok daha güzel olur. Evet Fatih sen en iyisi makale halinde, herkesin anliyabilecegi bir dille yaz. En hayirlisi bu olur…
merhaba fatih kardes bence arkadaslara mail atma sitde yayinlasinlar makale haline getir derim. ne dersin?
Fatih MUTLU. Bana da lazim asagidaki mail adresine yollayabilirmisin ?
uncontrolled.power@hotmail.com
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
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
hastane otomasyou yapiyorum burdaki gibi procedur le yaptim ama baglanti yolunda hata veriyoo ne yapabilirim??anahtar sözcük desteklenmiyo dio
Tesekkurler Ihsan kardesim.
Hocanin düzeltmeleri olursa bizimle paylasirsin artik? 😉
Valla çok güzel anlatmissin ellerine saglik abi…
Ahmet abicim. Ben bu bütün SQL Islemleri serisini okulda hocaya göstericem 🙂 Kesin begenicek 🙂