Makale Özeti

Yazının genel özeti şudur ki Yazdığımız stored procedure ler parametre bazında çalışır. Yani ona gönderilen parametreye göre execute işlemi yapar. Anlık olarak kendisini derler ve size kimi zaman grid view data kimi zaman boolean işlem sonu raporu verir. Şimdi örnekler ile gönderdiğimiz parametrelere karşılık stored procedure lerimizin verdiği tepkileri göreceğiz.

Makale

Stored Procedure II

Bir önceki yazımızda Stored Procedureün ne olduğundan, neden kullanmamız gerektiği - bize ne yarar sağladığından- bahsetmiş;

- Create Table
- Drop Table
- Select
- Insert
- Update
- Delete

işlemlerini nasıl yapacağımızdan ve son olarak iç içe birden fazla işlemi tek stored procedure de nasıl kullanacağımızdan bahsetmiştik. Bu kısma yaptığımız şey .Net programlamak değil SQL Server programlamaktı. Bu yazımızda ise C# ve VB.Net projelerimizde hazırladığımız Stored Procedure leri nasıl kullanacağımızdan bahsedeceğim.

Yazının genel özeti şudur ki;

Yazdığımız stored procedure ler parametre bazında çalışır. Yani ona gönderilen parametreye göre execute işlemi yapar. Anlık olarak kendisini derler ve size kimi zaman grid view data kimi zaman boolean işlem sonu raporu verir.

Şimdi örnekler ile gönderdiğimiz parametrelere karşılık stored procedure lerimizin verdiği tepkileri göreceğiz.

Öncelikle tüm işlemlerde kullanacağımız database yapısını tasarlayalım. Aşağıdaki SQLi Query Analizerde çalıştırarak örneklerimizde kullanacağımız yapıda bir tablo elde edebilirsiniz:

if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[TESTTABLO]) and OBJECTPROPERTY(id, NIsUserTable) = 1)
drop table [dbo].[TESTTABLO]
GO

CREATE TABLE [dbo].[TESTTABLO] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[fld_isim] [nvarchar] (50) COLLATE Turkish_CI_AS NULL ,
[fld_email] [nvarchar] (50) COLLATE Turkish_CI_AS NULL ,
[fld_telefon] [nvarchar] (50) COLLATE Turkish_CI_AS NULL
) ON [PRIMARY]
GO




SELECT İŞLEMİ
Bu işlem için kullanacağımız stored procedure yapısı şu şekilde:

CREATE PROCEDURE [dbo].[Select_Ornek]
AS
SELECT fld_isim, fld_telefon, fld_email FROM TESTTABLO
GO


C#.Net
//Veri Tabanı bağlantı Satırımız
SqlConnection objBaglanti = new SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind");

// Bağlantımızı Açıyoruz
objBaglanti.Open();

//SqlCommand nesnemizi oluşturuyoruz
SqlCommand objCommand = new SqlCommand();

//SqlCommand nesnemizin bağlantısı olarak objBaglanti yı belirtiyoruz
objCommand.Connection = objBaglanti;

//Çalıştıracağımız Command tipinin yani sql in tipinin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure;

//Çalıştıracağımız Stored Procedure ün ismini belirtiyoruz
objCommand.CommandText = "Select_Ornek";

//Stored Procedure ümüzü çalıştırıp içeriğini DataReadera yüklüyoruz
SqlDataReader objReader = objCommand.ExecuteReader();

//DBGridimizin datasource ü olarak DataReaderımızı tanımlıyoruz
objDbGrid.DataSource = objReader;

//DbGrid imizi Bind ediyoruz
objDbGrid.DataBind();

//Readerımızı kapatıyoruz
objReader.Close();

//Bağlantımızı kapatıyoruz
objBaglanti.Close();


VB.Net

//Veri Tabanı bağlantı Satırımız
Dim objBaglanti As New SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind")

// Bağlantımızı Açıyoruz
objBaglanti.Open()

//SqlCommand nesnemizi oluşturuyoruz
Dim objCommand As New SqlCommand

//SqlCommand nesnemizin bağlantısı olarak objBaglanti yı belirtiyoruz
objCommand.Connection = objBaglanti

//Çalıştıracağımız Command tipinin yani sql in tipinin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure

//Çalıştıracağımız Stored Procedure ün ismini belirtiyoruz
objCommand.CommandText = "Select_Ornek"

//Stored Procedure ümüzü çalıştırıp içeriğini DataReadera yüklüyoruz
Dim objReader As SqlDataReader = objCommand.ExecuteReader()

//DBGridimizin datasource ü olarak DataReaderımızı tanımlıyoruz
objDbGrid.DataSource = objReader

//DbGrid imizi Bind ediyoruz
objDbGrid.DataBind()

//Readerımızı kapatıyoruz
objReader.Close()

//Bağlantımızı kapatıyoruz
objBaglanti.Close()



INSERT İŞLEMİ
Bu işlem için kullanacağımı Stored Procedure Yapısı şu şekilde:

CREATE PROCEDURE [dbo].[Insert_Ornek]
@Isim nvarchar(50),
@Telefon nvarchar(50),
@Email nvarchar(50)
AS
INSERT INTO TESTTABLO(fld_isim, fld_telefon, fld_email) Values(@Isim, @Telefon, @Email)
GO


C#.Net
//Bağlantı nesnemizi tanımlıyor ve connection string imizi yazıyoruz
SqlConnection objBaglanti = new SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind");

//Bağlantımızı Açıyoruz
dbConn.Open();

//SqlCommand nesnemizi tanımlıyoruz ve çalıştıracağı procedure ün ismini veriyoruz
SqlCommand objCommand = new SqlCommand ("Insert_Ornek",objBaglanti);

//SqlCommand tipimizin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure;

//Stored Procedure ümüze Isim,Telefon ve Email parametrelerini gönderiyoruz
//Burada önemli olan data tiplerini tablomuzdaki ile aynı tutmak

objCommand.Parameters.Add("@Isim", SqlDbType.NVarChar, 50, "fld_isim");
objCommand.Parameters["@Isim"].Value = "Evren AYAN";

objCommand.Parameters.Add("@Telefon", SqlDbType.NVarChar, 50, "fld_telefon");
objCommand.Parameters["@Telefon"].Value = "02121234567";

objCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50, "fld_email");
objCommand.Parameters["@EMail"].Value = "evren@evrenayan.net";


//Stored Procedure ümüzü çalıştırıyoruz
objCommand.ExecuteNonQuery();

//Bağlantıyı Kapatıyoruz
objBaglanti.Close();

VB.Net

//Bağlantı nesnemizi tanımlıyor ve connection string imizi yazıyoruz
Dim objBaglanti As New SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind")

//Bağlantımızı Açıyoruz
dbConn.Open()

//SqlCommand nesnemizi tanımlıyoruz ve çalıştıracağı procedure ün ismini veriyoruz
Dim objCommand As New SqlCommand("Insert_Ornek",objBaglanti)

//SqlCommand tipimizin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure

//Stored Procedure ümüze Isim,Telefon ve Email parametrelerini gönderiyoruz
//Burada önemli olan data tiplerini tablomuzdaki ile aynı tutmak

objCommand.Parameters.Add("@Isim", SqlDbType.NVarChar, 50, "fld_isim")
objCommand.Parameters("@Isim").Value = "Evren AYAN";

objCommand.Parameters.Add("@Telefon", SqlDbType.NVarChar, 50, "fld_telefon")
objCommand.Parameters("@Telefon").Value = "02121234567";

objCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50, "fld_email")
objCommand.Parameters("@EMail").Value = "evren@evrenayan.net"


//Stored Procedure ümüzü çalıştırıyoruz
objCommand.ExecuteNonQuery()

//Bağlantıyı Kapatıyoruz
objBaglanti.Close()


UPDATE İŞLEMİ
Update işlemi insert işlemi ile aynı yapıda yapılır, zira sadece sql kodu değişecektir ve o da zaten Stored Procedure içinde değiştirilir. Bu işlem için kullanacağımız Stored Procedure yapısı şu şekilde :

CREATE PROCEDURE [dbo].[Update_Ornek]
@Isim nvarchar(50),
@Telefon nvarchar(50),
@Email nvarchar(50)
AS
Update TESTTABLE Set fld_isim = @Isim, fld_telefon = @Telefon, fld_email = @EMail
GO


C#.Net

//Bağlantı nesnemizi tanımlıyor ve connection string imizi yazıyoruz
SqlConnection objBaglanti = new SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind");

//Bağlantımızı Açıyoruz
dbConn.Open();

//SqlCommand nesnemizi tanımlıyoruz ve çalıştıracağı procedure ün ismini veriyoruz
SqlCommand objCommand = new SqlCommand ("Update_Ornek",objBaglanti);

//SqlCommand tipimizin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure;

//Stored Procedure ümüze Isim,Telefon ve Email parametrelerini gönderiyoruz
//Burada önemli olan data tiplerini tablomuzdaki ile aynı tutmak

objCommand.Parameters.Add("@Isim", SqlDbType.NVarChar, 50, "fld_isim");
objCommand.Parameters["@Isim"].Value = "Ahmet Karaca";

objCommand.Parameters.Add("@Telefon", SqlDbType.NVarChar, 50, "fld_telefon");
objCommand.Parameters["@Telefon"].Value = "02127654321";

objCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50, "fld_email");
objCommand.Parameters["@EMail"].Value = "evren@maxiasp.net";

//Stored Procedure ümüzü çalıştırıyoruz
objCommand.ExecuteNonQuery();

//Bağlantıyı Kapatıyoruz
objBaglanti.Close();

VB.Net

//Bağlantı nesnemizi tanımlıyor ve connection string imizi yazıyoruz
Dim objBaglanti As New SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind")

//Bağlantımızı Açıyoruz
dbConn.Open()

//SqlCommand nesnemizi tanımlıyoruz ve çalıştıracağı procedure ün ismini veriyoruz
Dim objCommand As New SqlCommand("Update_Ornek",objBaglanti)

//SqlCommand tipimizin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure

//Stored Procedure ümüze Isim,Telefon ve Email parametrelerini gönderiyoruz
//Burada önemli olan data tiplerini tablomuzdaki ile aynı tutmak

objCommand.Parameters.Add("@Isim", SqlDbType.NVarChar, 50, "fld_isim")
objCommand.Parameters("@Isim").Value = "Ahmet Karaca";

objCommand.Parameters.Add("@Telefon", SqlDbType.NVarChar, 50, "fld_telefon")
objCommand.Parameters("@Telefon").Value = "02127654321";

objCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50, "fld_email")
objCommand.Parameters("@EMail").Value = "evren@maxiasp.net"


//Stored Procedure ümüzü çalıştırıyoruz
objCommand.ExecuteNonQuery()

//Bağlantıyı Kapatıyoruz
objBaglanti.Close()


DELETE İŞLEMİ
Burada kullanacağımız Stored Procedure yapısı şu şekilde :

CREATE PROCEDURE [dbo].[Delete_ornek]
@ID int
AS
DELETE FROM TBLTEST where ID = @ID
GO


C#.Net

//Bağlantı nesnemizi tanımlıyor ve connection string imizi yazıyoruz
SqlConnection objBaglanti = new SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind");

//Bağlantımızı Açıyoruz
dbConn.Open();

//SqlCommand nesnemizi tanımlıyoruz ve çalıştıracağı procedure ün ismini veriyoruz
SqlCommand objCommand = new SqlCommand ("Delete_Ornek",objBaglanti);

//SqlCommand tipimizin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure;

//Stored Procedure ümüze silmek istediğimiz kaydın ID sini parametre olarak gönderiyoruz
//Burada önemli olan data tiplerini tablomuzdaki ile aynı tutmak

objCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID");
objCommand.Parameters["@ID"].Value = "1";

//Stored Procedure ümüzü çalıştırıyoruz
objCommand.ExecuteNonQuery();

//Bağlantıyı Kapatıyoruz
objBaglanti.Close();

VB.Net


//Bağlantı nesnemizi tanımlıyor ve connection string imizi yazıyoruz
Dim objBaglanti As New SqlConnection("server=localhost;uid=sqlUser;pwd=sqlPass;database=Northwind")

//Bağlantımızı Açıyoruz
dbConn.Open()

//SqlCommand nesnemizi tanımlıyoruz ve çalıştıracağı procedure ün ismini veriyoruz
Dim objCommand As New SqlCommand("Delete_Ornek",objBaglanti)

//SqlCommand tipimizin Stored Procedure olduğunu belirtiyoruz
objCommand.CommandType = CommandType.StoredProcedure

//Stored Procedure ümüze silmek istediğimiz kaydın ID sini parametre olarak gönderiyoruz
//Burada önemli olan data tiplerini tablomuzdaki ile aynı tutmak

objCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID")
objCommand.Parameters("@ID").Value = "1"

//Stored Procedure ümüzü çalıştırıyoruz
objCommand.ExecuteNonQuery()

//Bağlantıyı Kapatıyoruz
objBaglanti.Close()


Bir Stored Procedure den geri bilgi dönüşü istiyorsak öncelikle Stored Procedure içinde geri dönecek değeri output olara deklara etmemiz gerekir.

@DegiskenAdi VeriTipi OUT

veya

@ID int OUT

Örneğin yukarıdaki "Insert" işlemimizden bir geri dönüş istiyoruz. O halde öncelikle Stored procedure ümüzde şöyle bir güncelleme yapmamız gerekir:

CREATE PROCEDURE [dbo].[Insert_Ornek]
@Isim nvarchar(50),
@Telefon nvarchar(50),
@Email nvarchar(50)
@ID int OUT
AS
INSERT INTO TESTTABLO(fld_isim, fld_telefon, fld_email) Values(@Isim, @Telefon, @Email)
SELECT @ID = @@ID
GO

Koyu işaretlediğimiz alanlardan ilkinde "ID" isimli bir değişken deklare ediyor ve bu değikenin integer tipinde ve Output olduğunu belirtiyoruz. İkincisinde ise aşağıdaki kod syntax ı ile .Net içinden erişebileceğimiz Return Value yi almış luyoruz.

Geri dönüş değerini de öncelikle parametre olarak göndermeliyiz

SqlParameter objSqlParam = objCommand.Parameters.Add("@ID", SqlDbType.Int, 0, "ID");
objSqlParam.Direction = ParameterDirection.Output;

Sonraki işlemimiz ise return value yi almak:

Int32 ID = (Int32)objCommand.Parameters["@ID"].Value;
label1.Text = System.Convert.ToString(ID);

Evren AYAN
www.evrenayan.net