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

Yapmamiz gereken ilk sey System.Data.SqlClient import etmek. Bu sart degil fakat isimizi buyuk olcude 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 cumleyi icerecek. Bu, bilgisayardan bilgisayara degisebilir. Ben kendiminkini ornek olarak gosterecegim. Ornek database olarak, cok bilinen Northwind'i alacagim:
Dim strBaglanti As String = "Data Source=AHMET-PCSQLSERVER;Initial Catalog=D:NORTHWND.MDF;Integrated Security=True"

Biraz karmasik gibi gorunen bu ifadeyi nasil elde ettimize bir bakalim, zira kafadan bilmemize gerek yok.
Visual Studio'yu aciyoruz ve menuden Data>T-SQL Editor>New Query Connection... tikliyoruz.
Connection sekmesinde veritanbanimizin yerini belirtiyoruz. Sonra Edit Connection diyoruz (islem 1).
Karsimiza cikan penceredeki Advenced dugmesni tikliyoruz (islem 2).
Advenced Properties penceresinde, kendimize ait olan ConnectionString var; onu aynen kopyaliyoruz (islem 3).

Dim strCN As String = "Data Source=AHMET-PCSQLSERVER;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 calisalim:

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

UDL file ile Connection String ogrenme:
Baglanti string'ini ogrenmenin baska basit bir yolu daha var. O da udl uzantili bir dosya olustumak.
Once herhangi bir metin dosyasi (mesela not defteri) acip uzantisini .uld olarak degistiriyoruz.
Sonra cift tiklayip aciyoruz.


Buradan Microsoft OLE DB Providor for SQL Server secenegini seciyor ve 'ileri' diyoruz.

'Baglanti' sekmesinde 3 secenek cikiyor karsimiza. Onlari da sekilde goruldugu gibi dolduruyoruz.

Ve udl uzantili dosyamizi "tekst dosyasi olarak" aciyoruz. Acilan tekst dosyasinda baglanti stringinizi goreceksiniz.


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

Bundan onceki dersimizde bir SQL veritabanina SqlConnection nesnesi ile nasil baglanti yapacagimizi ogrenmistik. Bu dersimizde ise SqlCommand nesnesine goz atacagiz.

Visual Basic.Net'te SqlCommand nesnesi nedir ve ne ise yarar, nasil kullanilir, aldigi parametreler nelerdir? Bunlara tek tek yuzeysel olarak deginelim.
SqlCommand aslinda bir cesit Sql komutudur; SELECT CustomerID From Customers gibi.
Bildigimiz Sql komutu ne ise yariyorsa SqlCommand da ayni ise yarar. Yani veritabanindaki kayitlari gostermek, silmek, guncelleme ve veritabanina yeni kayıt girme islemlerinde kullanilir.

ilk etapta SqlCommand nesnesinin cok kullanilan bazi ozelliklerini (properties) ve metotlarini ele almak istiyorum.
Bunlar:
Connection: Bu ozellik SqlCommand nesnemizi diledigimiz veritabanina baglanmamizi saglar.
Ornek:

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


Gecen 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 ozelligini az once olusturdugumuz SqlConnection (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 henuz hic bir komut vermedik!


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


CommandText: Bu ozellik yardimiyla SqlCommand nesnemiz ile veritabanina ne komut verecegimizi belirleriz.
CommandType ozelligi gozonunde bulundurularak sql cumlesi, stored procedure veya dogrudan tablo ismi yazilir.
Ornek:
CMD.CommandType = CommandType.Text
CMD.CommandText = "SELECT * FROM Customers"


Text yerine TableDirect yazsaydik CMD.CommandText = “table ismi”;StoredProcedure yazsaydik daha onceden olusturdugumuz StoredProcedure ismini kullanacaktik.
SqlCommand nesnesinin soz dizilimi (syntax) yeni baslayanlar icin biraz kafa karistirici olabiliyor. O yuzden soyle bir ozet yapmak istiyorum. SqlCommand nesnesini 3 farkli soz dizilimi ile fakat ayni sonucu verecek sekilde yazalim:


Birinci sekil:
Dim strBaglanti As String = "Data Source=AHMET-PCSQLSERVER;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


ucuncu sekil:

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


ikinci ve ucuncu yontemlere baktigimizada .CommandType metodunu kullanmadan, sql komutumuzu dogrudan .Text seklinde kullandigimizi goruruz. Hata vermeyecektir, cunku SqlCommand nesnesinin ontanimli 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 kumeleri cekmemiz gerekir. Boyle bir durumda, ExecuteReader metodunu kullanabiliriz. ExecuteReader metodu, calistirilan komut sonucu elde edilen sonuc kumesinden bir SqlDataReader nesnesi icin 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 ucuncu kolondaki bilgiler
Loop
CN.Close()


Sonuc olarak Customers tablosunda CustomerID'si ALFKI olan kayitlarin ikinci kolonundaki bilgiler donecektir.


ExecuteNonQuery()
Bu metot bize, SqlCommand ile verdigimiz komuttan etkilenen kayitlarin adedini verir. Sonuc integer tipindedir.


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, ornegin "Toplam ... adet kayit guncellendi" seklinde bir bilgi mesaji verebiliriz; ya da donen deger '0' ise "guncelleme basarisiz" gibi...


ExecuteScalar()
ExecuteReader() metodundan bahsederken sonuc kumesi ibaresini kullanmistik. ExecuteScalar() tek alanlik veri donduren sql komutlari icin kullanilir. Bu yuzden 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 gececegi muhakkak.
Insallah bir sonraki dersimizde SqlDataAdapter nesnesini ele alacagiz.
Merhaba arkadaslar.
Bundan onceki iki dersimizde veritabanina nasil bağlanacağımızıve sqlcommand nesnesiyle nasil sorgu yapacagimizi ogrenmistik.
Bu dersimizde secme (select), kaydetme (insert), guncelleme (update) ve silme (delete) islemelerinin nasil yapildigini ogrenecegiz insallah.

Kullancagimiz database, kendi olusturdugum Okul adinda basit bir veritabani. Ama siz dilerseniz kendi olusturdugunuz bir veritabanini da kullanabilirsiniz.
Kisa bir ornekle ilk iki dersin kisa bir ozetini yapmak istiyorum once. Ayrica secme islemiyle de baslamis oluruz.

Kullanacagimiz tablonun adi OgrenciKayit. Bu tabloda 4 stun var: ID, Ad, Soyad, Sehir.
Formumuza ID icin bir combobox, Ad, Soyad ve Sehir icin de iki tane de textbox ekleyelim.
Combobox'un degerini degistirdigimizde textboxlar da degissin. Kisacasi sectigimiz ID'ye ait bilgileri gorecegiz.

Oncelikle uygulamamizin mantigini ve izleyecegimiz yolu bir belirleyelim:
1-) Veritabanimiza baglanmak icin bir SqlConnection nesnesi,
2-) Veritabanindaki bilgileri kullanmak (secme, kaydetme, silme, guncelleme) icin SqlCommand
3-) SqlCommand'in yapacagi islem icin bir sorgu string'i (“SELECT * From Categories” gibi)
4-) Sanal bir tablo olusturmak icin DataTable (Sanal tablo diyorum, cunku veritabanindan istedigimiz tabloyu bir kerelik cekip, baglantisiz (disconnected) calisacagiz. Performans acisinan bicilmis kaftandir bu metot.)
5-) Baglantisiz calisabilmemizi saglayan, bir nevi kopru vazifesi yapan SqlDataAdapter (DataTable'yi doldurmak icin)
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 = "duzelt"
Dim Dreader As SqlDataReader

Malzemelerimiz bunlar.
Simdi yapacagimiz ilk is sayfa yuklendiginde 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 gosterdigi deger
CN.Close()
End Sub


ve sayfamiz yuklenirken bu metodu cagiralim:


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

Combobox'stan baska bir deger sectigimizde:

Private Sub Combobox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbo315.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 cekmek ve ilgili yerlere yazdirmak oldu.

Simdi yeni bir kaydin girilmesi icin yapilacak islemlere bakalim. BtnYeni adinda bir buton ekleyip cift tiklayalim:

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


Burada kayda deger onemli bir sey yapmiyoruz. Yalniz, sayfamizin basinda tanimladigim Islem adli string degiskenine dikkat edin. Simdiki degeri "yeni" oldu. Sebebini az sonra aciklayacagim.

Simdi bir metotla silme, ekleme ve duzeltme islemlerini yapacagiz. Bu uc islemi ayri ayi metotlarla da yapabiliriz, ama ben bir metotla yapacagim.
Izleyecegimiz yola gelince; duruma gore SQL sorgumuzu yazacagiz ve isi SqlCommand nesnesine havale edecegiz. Bu ozu bu kadar basit. Ornegin silme islemi icin:


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 butun hatalara acik oldugu icin programimizin cokme ihtimali yuksek 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 = "duzelt"
MessageBox.Show("1 kayit silindi")
Else
MessageBox.Show("Silme islemi gerceklesmedi!.")
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 = "duzelt"
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 = "duzelt" 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 = "duzelt"
MessageBox.Show("1 kayit yenilendi/duzeltildi")
Else
MessageBox.Show("Yenileme islemei gerceklesmedi!.")
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 cagiriyoruz.
Akla soyle bir soru gelebilir: Program hangi islemi (sil, yeni, duzelt) yapacagini nereden biliyor? Iste bu sorunun cevabi Islem string'inde sakli.
Sil butonuna basinca islem="sil" oluyor, yeni butonuna basinca islem="yeni" oluyor; diger butun durumlarda ise islem="duzelt" oluyor. Cunku 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) Handles btnIptal.Click
Islem = "duzelt"
Label1.Visible = True
cboID.Visible = True
End Sub



Bir sonraki dersimizde Visual Basic.NET ile Stored Prodecture konusuna deginecegim insallah. Gorusmek uzere

Visual Basic.NET ile SQL veri tabani islemleri hakkinda bundan onceki derslerimizdeki orneklerde stored procedure kullanmadan dogrudan SQL sorgulari yazarak islemler yapmistik.Stored porecedure ile calismak aslinda isin kolayina kacmaktir. Ozetle soylemek gerekirse, SQL tarafina bize lazim olan sorguyu yaziyoruz, Visual Studio ortamindan da yalnizca ismi ile cagiriyoruz. Sorgularla, tirnaklarla, parantezlerle... debellesmemize gerek kalmayacak yani.
Lafi daha fazla uzatmadan hemen orneklerimize gecmek istiyorum.
Database olarak daha onceki makalelerimde de kullandigim “Okul” adli basit bir veri tabani kullanacagiz. Icinde “OgrenciKayit” adinda tek bir tablo var. Bu tabloda da ID, Ad, Soyad ve Sehir stunlari mevcut.
Bu kisa bilgiden sonra ilk ornegimize gecebiliriz artik.
Stored Procedure ile Select islemi:
SQL Server management studioyu acip bir stpred procedure olusturuyoruz.
create procedure S_OgrenciKayit
as
Select * from OgrenciKayit

Bu query'yi calistirdiktan sonra Okul adli veri tabanina ait 'programmability' klasorundeki 'Stored Procedures' klasorunde “S_OgrenciKayi” adinda stored procedure olusmus olacaktir.
Simdi Visual Studio'ya gecip programimizi acalim. 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 soyle bir stored procedure olusturuyoruz:
Create proc D_OgrenciKayit
(
@ID int
)
as
Delete from OgrenciKayit where ID=@ID

Bu sorguyu calistirdiktan sonra stored procemiz olusturulacaktir.
Gelelim kodlarimiza. Uygulamamiza bir adet 'sil' butonu bir adet de textbox ekliyoruz. Textbox'a silmek istedigimiz kaydin (ogrencinin) 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 cevirmemiz daha guvenli olacaktir.
CN.Open()
CMD.ExecuteNonQuery() ' ExecuteNonQuery() metodunu kullanmazsak islem gerceklesmez!
CN.Close()

Silme isleminden sonra grid'deki bilgileri tazelemek icin 'listele' butonuna basmayi unutmayin.
Stored Procedure ile insert islemi:
Bu da son derece basit bir islem. SQL tarafina gecip 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 uc adet textbox (txtAd, txtSoyad, txtSehir) ve bir tane 'yeni kayit' adinda buton ekliyoruz.
Butona basinca bu uc 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()

ozetlemek gerekirse; Olusturdugumuz stored procedure bizden uc adet parametre istiyor. Bu parametrelerin yerini (yani textbox'lari) belirtiyoruz ve SqlCommand nesnemizi ExecuteNonQuery() metodu ile calistiriyoruz. 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
Turkce anlamı olarak saklı yordamlar şeklinde cevirebilir.Store procedurler,sorgularımızın daha hızlı ve esnek calışmasına olanak sağlar.Bir kere derlendikleri icin bu hıza olumlu etki yapar,ayrıca client tarafında değil server tarafında calışırlar,iyi bir sunucu uzerinde cok optimal sonuclar verebilirler.
Sql server uzerinde 3 tip stored procedur vardır.
1. System Store Prosedurleri : SQL Server tarafından işletilen prosedurler, .sp_ onekine sahiptirler.
2. Extend Store Proseduleri : Server dışında calışan dinamik kutuphanelerdir, .xp_onekine sahiptir.
3. Local Store Prosedurler : Kendimizin oluşturduğu Sql Server uzerinde calışan prosedurler.
SQL Server management kullanarak yeni bir local store procedur oluşturma işlemi ise şoyledir.




Store procedure
Turkce anlamı olarak saklı yordamlar şeklinde cevirebilir.Store procedurler,sorgularımızın daha hızlı ve esnek calışmasına olanak sağlar.Bir kere derlendikleri icin bu hıza olumlu etki yapar,ayrıca client tarafında değil server tarafında calışırlar,iyi bir sunucu uzerinde cok optimal sonuclar verebilirler.
Sql server uzerinde 3 tip stored procedur vardır.
1. System Store Prosedurleri : SQL Server tarafından işletilen prosedurler, .sp_ onekine sahiptirler.
2. Extend Store Proseduleri : Server dışında calışan dinamik kutuphanelerdir, .xp_onekine sahiptir.
3. Local Store Prosedurler : Kendimizin oluşturduğu Sql Server uzerinde calışan prosedurler.
SQL Server management kullanarak yeni bir local store procedur oluşturma işlemi ise şoyledir.


T-Sql komutu kullanarak yeni bir stored procedur yazma kodları ise şoyledir.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[murat](
@ADI NVARCHAR(50),
@SOYADI NVARCHAR(50),
@SEHIR NVARCHAR(50)
)

AS
set @ADI = '"' + @ADI + '*"'
set @SOYADI = '"' + @SOYADI + '*"'
set @SEHIR = '"' + @SEHIR + '*"'




SELECT *
FROM murat_tablo
WHERE contains ([Column 6],@ADI) and contains ([Column 7],@SOYADI) and contains ([Column 11],@SEHIR)


Burada murat adında bir stored procedur tanımladık ve bu prosedurumuze de 3 adet parametre gonderdirk. Bunlar Ad,soyadı,sehir
Bu gonderdiğimiz parametlerle bildiğimiz select sorgusunu yazdık.
İyi calışmalar…




Merhaba Arkadaslar,
Bu makalemizde SQL Server uzerinde Stored Procedure yazimini inceleyecegiz.
Stored Procedure’ler database server uzerinde saklanan SQL cumlecikleridir. Parametreler alabilirler ve size sonuclar dondurebilirler. Avantajlari arasinda DB server uzerinde olmasindan dolayi daha hizli calismalari, sadece ilk calismalarinda derlenmeleri sonraki calismalarda derlenmemeleri (bu da neden hizli oldugunu acikliyor) SQL cumlecikleri ve programlama dilleri ile yazdigimiz kodlari birbirinden ayristirmamizi saglamasi sayilabilir.

Mesela MUSTERI tablosundaki tum kayitlari getiren sadece ID degeri verilen MUSTERI kaydini getiren ve istenilen musteri kaydinin silinmesini saglayan Stored Procedure leri sirayla yazalim.Tum musteri kayitlarini donduren Stored Procedure CREATE PROCEDURE Musteri_ReadAll
AS
BEGIN
SET NOCOUNT ON;
SELECT * from MUSTERI
END
GO

Peki bu Stored Procedure nasil calistiracagiz. Bunu da EXEC komutu ile yapariz.
EXEC dbo.Musteri_ReadAll komutunun sonuc kumesi asagidaki gibidir.



Sadece ID si verilen bir musteri 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 musteri 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
Baska bir makalede gorusmek uzere….




__________________