SqlConnection nesnesi, bir SqlServer database ile baglanti kurmamizi saglayan bir nesnedir.
Hemen bir örnekle nasil yapildigina bir bakalim.

Yapmamiz gereken ilk sey System.Data.SqlClient import etmek. Bu sart degil fakat isimizi büyük ölçüde kolaylastiracaktir.

Sonra bir SqlConnection nesnesi olusturacagiz: Dim CN As New SqlConnection
SqlConnection nesnesi String seklinde bir parametre alir ki, bu String bizim baglantimizi kuracak olan cümleyi içerecek. Bu, bilgisayardan bilgisayara degisebilir. Ben kendiminkini örnek olarak gösterecegim. Örnek database olarak, çok bilinen Northwind'i alacagim:
Dim strBaglanti As String = "Data Source=Yunus-PC\SQLSERVER;Initial Catalog=D:\NORTHWND.MDF;Integrated Security=True"


Biraz karmasik gibi görünen bu ifadeyi nasil elde ettimize bir bakalim, zira kafadan bilmemize gerek yok.
Visual Studio'yu açiyoruz ve menüden Data>T-SQL Editor>New Query Connection... tikliyoruz.
Connection sekmesinde veritanbanimizin yerini belirtiyoruz. Sonra Edit Connection diyoruz (islem 1).
Karsimiza çikan penceredeki Advenced dügmesni tikliyoruz (islem 2).
Advenced Properties penceresinde, kendimize ait olan ConnectionString var; onu aynen kopyaliyoruz (islem 3).


Dim strCN As String = "Data Source=Yunus-PC\SQLSERVER;Initial Catalog=D:\NORTHWND.MDF;Integrated Security=True"
Dim CN As New SqlConnection
CN.ConnectionString = strCN

CN.Open()
'.....
CN.Close()

End Sub

SqlConnectionStringBuilder
Bir de yukaridaki islemi SqlConnectionStringBuilder nesnesiyle yapmaya çalisalim:

Dim CNBuilder As New SqlConnectionStringBuilder
CNBuilder.IntegratedSecurity = True
CNBuilder.PersistSecurityInfo = False
CNBuilder.InitialCatalog = "NORTHWIND"
CNBuilder.DataSource = "YUNUS-PC\SQLSERVER"
Dim CN As New SqlConnection(CNBuilder.ConnectionString)
CN.Open()
'.....
CN.Close()

UDL file ile Connection String ögrenme:
Baglanti string'ini ögrenmenin baska basit bir yolu daha var. O da udl uzantili bir dosya olustumak.
Once herhangi bir metin dosyasi (mesela not defteri) açip uzantisini .uld olarak degistiriyoruz.
Sonra çift tiklayip açiyoruz.


Buradan Microsoft OLE DB Providor for SQL Server seçenegini seçiyor ve 'ileri' diyoruz.

'Baglanti' sekmesinde 3 seçenek çikiyor karsimiza. Onlari da sekilde görüldügü gibi dolduruyoruz.

Ve udl uzantili dosyamizi "tekst dosyasi olarak" açiyoruz. Açilan tekst dosyasinda baglanti stringinizi göreceksiniz.


SqlServer'e baglanti SqlConnection ve SqlConnectionStringBuilder nesneleri ile kisaca bu sekilde olusturulur.
Insallah bir sonraki derste SqlCommand nesnesine deginecegim.

Bundan önceki dersimizde bir SQL veritabanina SqlConnection nesnesi ile nasil baglanti yapacagimizi ögrenmistik. Bu dersimizde ise SqlCommand nesnesine göz atacagiz.

Visual Basic.Net'te SqlCommand nesnesi nedir ve ne ise yarar, nasil kullanilir, aldigi parametreler nelerdir? Bunlara tek tek yüzeysel olarak deginelim.
SqlCommand aslinda bir çesit Sql komutudur; SELECT CustomerID From Customers gibi.
Bildigimiz Sql komutu ne ise yariyorsa SqlCommand da ayni ise yarar. Yani veritabanindaki kayitlari göstermek, silmek, güncelleme ve veritabanina yeni kayıt girme islemlerinde kullanilir.

ilk etapta SqlCommand nesnesinin çok kullanilan bazi özelliklerini (properties) ve metotlarini ele almak istiyorum.
Bunlar:
Connection: Bu özellik SqlCommand nesnemizi diledigimiz veritabanina baglanmamizi saglar.
Örnek:

Dim strBaglanti As String = "Data Source=YUNUS-PC\SQLSERVER;Initial Catalog=D:\NORTHWND.MDF;Integrated Security=True"
Dim CN As New SqlConnection(strBaglanti)
Dim CMD As New SqlCommand
CMD.Connection = CN


Geçen dersimizde de yaptigimiz gibi bir baglanti String'i ve bir baglanti (connection) olusturduk. Baglanti String'imizi SqlConnection nesnesine parametre olarak verdik.
Son olarak yaptigimiz ise bir SqlCommand nesnesi olusturup connection özelligini az önce olusturdugumuzSqlConnection (CN) nesnesine bagladik.
Yani, elimizde bir veritabani (database), bu veritabani ile iletisim kurmamizi saglayacak bir baglanti ve veritabanina komut verecek bir nesnemiz var. Dikkat edin henüz hiç bir komut vermedik!


CommandType :
Kullanilacak Sql komutunun (cümlesinin) tipini belirler.
Bunlar Text, StoredProcedure, TableDirect seklinde olabilir.


CommandText: Bu özellik yardimiyla SqlCommand nesnemiz ile veritabanina ne komut verecegimizi belirleriz.
CommandType özelligi gözönünde bulundurularak sql cümlesi, stored procedure veya dogrudan tablo ismi yazilir.
Örnek:
CMD.CommandType = CommandType.Text
CMD.CommandText = "SELECT * FROM Customers"


Text yerine TableDirect yazsaydik CMD.CommandText = “table ismi”;StoredProcedure yazsaydik daha önceden olusturdugumuz StoredProcedure ismini kullanacaktik.
SqlCommand nesnesinin söz dizilimi (syntax) yeni baslayanlar için biraz kafa karistirici olabiliyor. O yüzden söyle bir özet yapmak istiyorum. SqlCommand nesnesini 3 farkli söz dizilimi ile fakat ayni sonucu verecek sekilde yazalim:


Birinci sekil:
Dim strBaglanti As String = "Data Source=YUNUS-PC\SQLSERVER;Initial Catalog=D:\NORTHWND.MDF;Integrated Security=True"
Dim CN As New SqlConnection(strBaglanti)
Dim CMD As New SqlCommand
CMD.Connection = CN
Dim strQ As String = "SELECT * FROM Customers"
CMD.CommandType = CommandType.Text
CMD.CommandText = strQ


ikinci sekil:

Dim strQ As String = "SELECT * FROM Customers"
Dim CMD As New SqlCommand(strQ)
CMD.Connection = CN


üçüncü sekil:

Dim strQ As String = "SELECT * FROM Customers"
Dim CMD As New SqlCommand(strQ, CN)


ikinci ve üçüncü yöntemlere baktigimizada .CommandType metodunu kullanmadan, sql komutumuzu dogrudan .Text seklinde kullandigimizi görürüz. Hata vermeyecektir, çünkü SqlCommand nesnesinin öntanimli metodu zaten .Text'tir.
Velhasil hepsi de ayni sonucu verir.


Simdi, elimizde SQL veritabanina bir baglanti (SqlConnection) ve bu veritabaninda islem yapabilecegimiz bir komut nesnemiz (SqlCommand) var. Sira birseyler yapmaya geldi.


ExecuteReader()
Uygulamalarimizda bazen veri kaynaklarindan veri kümeleri çekmemiz gerekir. Böyle bir durumda,ExecuteReadermetodunu kullanabiliriz. ExecuteReader metodu, çalistirilan komut sonucu elde edilen sonuç kümesinden birSqlDataReader nesnesi için veri akisini saglar.
Hemen basit bir uygulama yapalim.


Dim strQ As String = "SELECT * FROM Customers WHERE CustomerID='ALFKI'"
Dim CMD As New SqlCommand(strQ, CN)
CN.Open()
Dim Reader As SqlDataReader = CMD.ExecuteReader()
Dim sonuc As String = String.Empty
Do While Reader.Read
MessageBox.Show(Reader(1).ToString & “ “ & Reader(2).ToString) 'ikinci ve üçüncü kolondaki bilgiler
Loop
CN.Close()


Sonuç olarak Customers tablosunda CustomerID'si ALFKI olan kayitlarin ikinci kolonundaki bilgiler dönecektir.


ExecuteNonQuery()
Bu metot bize, SqlCommand ile verdigimiz komuttan etkilenen kayitlarin adedini verir. Sonuç integertipindedir.


Dim strQ AsString = "update Customers set Country ='Mexico' where Country ='Mexico...'"
Dim CMD As New SqlCommand(strQ, CN)
CN.Open()
Dim Toplam As Integer = CMD.ExecuteNonQuery
MessageBox.Show("Toplam etilenen kayit sayisi: " & Toplam)
CN.Close()
Nasil kullanabiliriz bunu, örnegin "Toplam ... adet kayit güncellendi" seklinde bir bilgi mesaji verebiliriz; ya da dönen deger '0' ise "güncelleme basarisiz" gibi...


ExecuteScalar()
ExecuteReader() metodundan bahsederken sonuç kümesi ibaresini kullanmistik. ExecuteScalar() tek alanlik veri döndüren sql komutlari için kullanilir. Bu yüzden ExecuteReader() 'den daha performanslidir.


Dim strQ As String = "Select COUNT(ContactName) from Customers"
Dim CMD As New SqlCommand(strQ, CN)
CN.Open()
Dim ToplamKayit As Integer = CMD.ExecuteScalar
MessageBox.Show("Toplam kayit: " & ToplamKayit)
CN.Close()


SqlCommand nesnesi elbette bunlarla sinirli degil. Bundan sonraki derslerimizde de bahsinin geçecegi muhakkak.
Insallah bir sonraki dersimizde SqlDataAdapter nesnesini ele alacagiz.
Merhaba arkadaslar.
Bundan önceki iki dersimizde veritabanina nasil bağlanacağımızıve sqlcommand nesnesiyle nasil sorgu yapacagimizi ögrenmistik.
Bu dersimizde seçme (select), kaydetme (insert), güncelleme (update) ve silme (delete) islemelerinin nasil yapildigini ögrenecegiz insallah.

Kullancagimiz database, kendi olusturdugum Okul adinda basit bir veritabani. Ama siz dilerseniz kendi olusturdugunuz bir veritabanini da kullanabilirsiniz.
Kisa bir örnekle ilk iki dersin kisa bir özetini yapmak istiyorum önce. Ayrica seçme islemiyle de baslamis oluruz.

Kullanacagimiz tablonun adi OgrenciKayit. Bu tabloda 4 stun var: ID, Ad, Soyad, Sehir.
Formumuza ID için bir combobox, Ad, Soyad ve Sehir için de iki tane de textbox ekleyelim.
Combobox'un degerini degistirdigimizde textboxlar da degissin. Kisacasi seçtigimiz ID'ye ait bilgileri görecegiz.

Öncelikle uygulamamizin mantigini ve izleyecegimiz yolu bir belirleyelim:
1-) Veritabanimiza baglanmak icin bir SqlConnection nesnesi,
2-) Veritabanindaki bilgileri kullanmak (seçme, kaydetme, silme, güncelleme) için SqlCommand
3-) SqlCommand'in yapacagi islem için bir sorgu string'i (“SELECT * From Categories” gibi)
4-) Sanal bir tablo olusturmak için DataTable (Sanal tablo diyorum, çünkü veritabanindan istedigimiz tabloyu bir kerelik çekip, baglantisiz (disconnected) çalisacagiz. Performans açisinan biçilmis kaftandir bu metot.)
5-) Baglantisiz çalisabilmemizi saglayan, bir nevi köprü vazifesi yapan SqlDataAdapter (DataTable'yi doldurmak için)
6-) ve veriyi okuyacak bir SqlDataReader. Bu sayede textbox'larimizi dolduracagiz.

Imports System.Data.SqlClient


Public Class frmOkul
Dim CN As New SqlConnection("Integrated Security=SSPI;Initial Catalog=Okul;Data Source=.\SQLEXPRESS")
Dim CMD As SqlCommand
Dim Sorgu As String = ""
Dim DA As SqlDataAdapter
Dim DT As DataTable

Dim Islem As String = "düzelt"
Dim Dreader As SqlDataReader

Malzemelerimiz bunlar.
Simdi yapacagimiz ilk is sayfa yüklendiginde combobox'u doldurmak olacak.
Bir metot yazalim:

Private Sub ComboBoxuDoldur()
CN.Open()
Sorgu = "SELECT ID, Ad, Soyad, Sehir FROM OgrenciKayit"
CMD = New SqlCommand(Sorgu, CN)
DA = New SqlDataAdapter(CMD)
DT = New DataTable
DA.Fill(DT)

cboID.DataSource = DT
cboID.DisplayMember = "ID" 'combobox'un aldigi deger
cboID.ValueMember = "ID" 'combobox'un gösterdigi deger
CN.Close()
End Sub


ve sayfamiz yüklenirken bu metodu çagiralim:


Private Sub frmCategories_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)HandlesMyBase.Load
ComboBoxuDoldur()
End Sub

Combobox'stan baska bir deger seçtigimizde:

Private Sub Combobox_SelectedIndexChanged(ByVal sender As Object, ByVal e AsSystem.EventArgs)Handles cboCategoryID.SelectedIndexChanged
CN.Open()
Sorgu = "SELECT ID,ad,soyad,sehir FROM OgrenciKayit WHERE ID=" & cboID.SelectedValue
CMD = New SqlCommand(Sorgu, CN)
Dreader = CMD.ExecuteReader

Do While Dreader.Read
txtAd.Text = Dreader("Ad").ToString
txtSoyad.Text = Dreader("Soyad").ToString
txtSehir.Text = Dreader("Sehir").ToString
Loop
CN.Close()
End Sub



Textbox'lara da gerekli veriyi aktardik.

Su ana kadar yaptigimiz islem, OgrenciKayit tablosundan veri çekmek ve ilgili yerlere yazdirmak oldu.

Simdi yeni bir kaydin girilmesi için yapilacak islemlere bakalim. BtnYeni adinda bir buton ekleyip çift tiklayalim:

Private Sub btnYeni_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)HandlesbtnYeni.Click
cboID.SelectedIndex = 0
cboID.Visible = False
Label1.Visible = False
txtAd.Text = ""
txtSoyad.Text = ""
Islem = "yeni"
End Sub


Burada kayda deger önemli bir sey yapmiyoruz. Yalniz, sayfamizin basinda tanimladigim Islem adli string degiskenine dikkat edin. Simdiki degeri "yeni" oldu. Sebebini az sonra açiklayacagim.

Simdi bir metotla silme, ekleme ve düzeltme islemlerini yapacagiz. Bu üç islemi ayri ayi metotlarla da yapabiliriz, ama ben bir metotla yapacagim.
Izleyecegimiz yola gelince; duruma göre SQL sorgumuzu yazacagiz ve isi SqlCommand nesnesine havale edecegiz. Bu özü bu kadar basit. Örnegin silme islemi için:


Sorgu = "DELETE FROM OgrenciKayit WHERE ID = " & cboID.SelectedValue
CN.Open()
Dim cmd As New SqlCommand(Sorgu, CN)
OK = cmd.ExecuteNonQuery


Tabi ki bu kodlari bu hâliyle birakirsak olasi bütün hatalara açik oldugu için programimizin çökme ihtimali yüksek olacaktir. Kodlarimizi mutlaka try – cathc blogu arasina almamiz lazim. Ayrica yapilan islemlerden sonra kullaniciya da bilgilendirici bir mesaj verilmeli.
Iste programimizin bel kemigini olusturan metot:

Private Sub IslemYap()
Dim OK As Integer = 0

If Islem = "sil" Then
Sorgu = "DELETE FROM OgrenciKayit WHERE ID = " & cboID.SelectedValue
Try
If CN.State = ConnectionState.Closed Then
CN.Open()
End If

Dim cmd As New SqlCommand(Sorgu, CN)
OK = cmd.ExecuteNonQuery

If OK = 1 Then
Label1.Visible = True
cboID.Visible = True
ComboBoxuDoldur()
txtAd.Text = ""
txtSoyad.Text = ""
txtSehir.Text = ""
Islem = "düzelt"
MessageBox.Show("1 kayit silindi")
Else
MessageBox.Show("Silme islemi gerçeklesmedi!.")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, ex.GetType.ToString)
Finally
CN.Close()
End Try
ElseIf Islem = "yeni" Then
Sorgu = "insert into OgrenciKayit values ('" & txtAd.Text & "','" & txtSoyad.Text & "','" & txtSehir.Text & "')"
Try
If CN.State = ConnectionState.Closed Then
CN.Open()
End If

Dim cmd As New SqlCommand(Sorgu, CN)
OK = cmd.ExecuteNonQuery

If OK = 1 Then
Label1.Visible = True
cboID.Visible = True
ComboBoxuDoldur()
Islem = "düzelt"
MessageBox.Show("1 yeni kayit eklendi")
Else
MessageBox.Show("Yeni kayit yapilamadi!.")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, ex.GetType.ToString)
Finally
CN.Close()
End Try
ElseIf Islem = "düzelt" Then
Sorgu = "Update OgrenciKayit set Ad='" & txtAd.Text & "', Soyad='" & txtSoyad.Text & "', Sehir='"& txtSehir.Text & "' WHERE ID=" & cboID.SelectedValue
Try
If CN.State = ConnectionState.Closed Then
CN.Open()
End If

Dim cmd As New SqlCommand(Sorgu, CN)
OK = cmd.ExecuteNonQuery

If OK = 1 Then
Label1.Visible = True
cboID.Visible = True
ComboBoxuDoldur()
Islem = "düzelt"
MessageBox.Show("1 kayit yenilendi/düzeltildi")
Else
MessageBox.Show("Yenileme islemei gerçeklesmedi!.")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, ex.GetType.ToString)
Finally
CN.Close()
End Try
End If
End Sub


ve bu metodu Kaydet ve sil butonlariyla çagiriyoruz.
Akla söyle bir soru gelebilir: Program hangi islemi (sil, yeni, düzelt) yapacagini nereden biliyor? Iste bu sorunun cevabi Islem string'inde sakli.
Sil butonuna basinca islem="sil" oluyor, yeni butonuna basinca islem="yeni" oluyor; diger bütün durumlarda ise islem="düzelt" oluyor. Çünkü geriye baska bir ihtimal ve yapilacak baska bir is kalmiyor.

Formumuza son olarak bir de iptal butonu ekleyelim:

Private Sub btnIptal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)HandlesbtnIptal.Click
Islem = "düzelt"
Label1.Visible = True
cboID.Visible = True
End Sub



Bir sonraki dersimizde Visual Basic.NET ile Stored Prodecture konusuna deginecegim insallah. Görüsmek üzere

Visual Basic.NET ile SQL veri tabani islemleri hakkinda bundan önceki derslerimizdeki örneklerde stored procedure kullanmadan dogrudan SQL sorgulari yazarak islemler yapmistik.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),
[FONT=Courier New @Soyad nvarchar(50),[/FONT]
[FONT=Courier New @sehir nvarchar(50)[/FONT]
)
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()




Store procedure
Türkçe anlamı olarak saklı yordamlar şeklinde çevirebilir.Store procedürler,sorgularımızın daha hızlı ve esnek çalışmasına olanak sağlar.Bir kere derlendikleri için bu hıza olumlu etki yapar,ayrıca client tarafında değil server tarafında çalışırlar,iyi bir sunucu üzerinde çok optimal sonuçlar verebilirler.
Sql server üzerinde 3 tip stored procedür vardır.
1. System Store Prosedürleri : SQL Server tarafından işletilen prosedürler, .sp_ önekine sahiptirler.
2. Extend Store Prosedüleri : Server dışında çalışan dinamik kütüphanelerdir, .xp_önekine sahiptir.
3. Local Store Prosedürler : Kendimizin oluşturduğu Sql Server üzerinde çalışan prosedürler.
SQL Server management kullanarak yeni bir local store procedür oluşturma işlemi ise şöyledir.




Store procedure
Türkçe anlamı olarak saklı yordamlar şeklinde çevirebilir.Store procedürler,sorgularımızın daha hızlı ve esnek çalışmasına olanak sağlar.Bir kere derlendikleri için bu hıza olumlu etki yapar,ayrıca client tarafında değil server tarafında çalışırlar,iyi bir sunucu üzerinde çok optimal sonuçlar verebilirler.
Sql server üzerinde 3 tip stored procedür vardır.
1. System Store Prosedürleri : SQL Server tarafından işletilen prosedürler, .sp_ önekine sahiptirler.
2. Extend Store Prosedüleri : Server dışında çalışan dinamik kütüphanelerdir, .xp_önekine sahiptir.
3. Local Store Prosedürler : Kendimizin oluşturduğu Sql Server üzerinde çalışan prosedürler.
SQL Server management kullanarak yeni bir local store procedür oluşturma işlemi ise şöyledir.


T-Sql komutu kullanarak yeni bir stored procedür yazma kodları ise şöyledir.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author: <muraty&yacute;lmaz>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[murat](
[FONT=Verdana @adi NVARCHAR(50),

[FONT=Verdana @SoyadI NVARCHAR(50),[/FONT]
[FONT=Verdana @sehir NVARCHAR(50)[/FONT]
)

AS
set @adi = '"' + @adi + '*"'
set @SoyadI = '"' + @SoyadI + '*"'
set @sehir = '"' + @sehir + '*"'




SELECT *
FROM murat_tablo
WHERE contains ([Column 6][COLOR=gray],[/COLOR @adi) and contains ([Column 7][COLOR=gray],[/COLOR @SoyadI) and contains ([Column 11][COLOR=gray],[/COLOR @sehir)


Burada murat adında bir stored procedür tanımladık ve bu prosedürümüze de 3 adet parametre gönderdirk. Bunlar Ad,soyadı,sehir
Bu gönderdiğimiz parametlerle bildiğimiz select sorgusunu yazdık.
İyi çalışmalar…



Merhaba Arkadaslar,
Bu makalemizde SQL Server üzerinde Stored Procedure yazimini inceleyecegiz.
Stored Procedure’ler database server üzerinde saklanan SQL cümlecikleridir. Parametreler alabilirler ve size sonuçlar döndürebilirler. Avantajlari arasinda DB server üzerinde olmasindan dolayi daha hizli çalismalari, sadece ilk çalismalarinda derlenmeleri sonraki çalismalarda derlenmemeleri (bu da neden hizli oldugunu açikliyor) SQL cümlecikleri ve programlama dilleri ile yazdigimiz kodlari birbirinden ayristirmamizi saglamasi sayilabilir.

Mesela MUSTERI tablosundaki tüm kayitlari getiren sadece ID degeri verilen MUSTERI kaydini getiren ve istenilen müsteri kaydinin silinmesini saglayan Stored Procedure leri sirayla yazalim.

  • Tüm müsteri kayitlarini döndüren Stored Procedure


CREATE PROCEDURE Musteri_ReadAll
AS
BEGIN
SET NOCOUNT ON;
SELECT * from MUSTERI
END
GO

Peki bu Stored Procedure nasil çalistiracagiz. Bunu da EXEC komutu ile yapariz.
EXEC dbo.Musteri_ReadAll komutunun sonuç kümesi asagidaki gibidir.





  • Sadece ID si verilen bir müsteri kaydini getiren Stored Procedure


CREATE PROCEDURE Musteri_ReadById
@Id int --parametre
AS
BEGIN
SET NOCOUNT ON;
SELECT * from MUSTERI
WHERE Id = @Id
END

Kullanimi asagidaki gibidir.
DECLARE @Id int
SET @Id = 2
EXEC dbo.Musteri_ReadById @Id




  • Istenilen bir müsteri kaydini silen Stored Procedure


CREATE PROCEDURE Musteri_DeleteById
@Id int --parametre
AS
BEGIN
SET NOCOUNT ON;
DELETE from MUSTERI
WHERE Id = @Id
END

Kullanimi asagidaki gibidir.
DECLARE @Id int
SET @Id = 2
EXEC dbo.Musteri_DeleteById @Id