Bu yazımızda da kısaca hem Stored Procedure kullanımını hemde procudereler içinde output parametresini nasıl kullanırız bunları ögrenicez.
Stored Procedureler konusunda detaylı araştırma yapmanız gerekiyor. Ama herşeyden önce konu ne olursa olsun bol örneklerle kendinizi problem çözer yeteneklere ulaştırmanız gerekiyor. Özelliklede Stored Procedure konusunda bol bol örnek yapmazsanız malesef çok ilerleyemezsiniz.
Peki Ama Neden Stored Procedure ?
Kısaca Stored Procedure kullanım amaçlarında bahsedecek olursak eğer ;
*** Stored Procedureler Server tarafında derlenip çalışıp sonuçları yolladıgından programınızın hızı konusunda önemli etkendir. Bu bile Stored Procedure kullanmak için yeterli bir sebeptir.
*** Aynı sebepten dolayı kaynakları daha az tükettiği için Network ağınızıda yormamış olur.
*** Projenizde kod kalabalıgınız azaltır. Modüler yazmaya yardımcı olur. Herhangi bir değişlik gündeme geldiğinde projenizi açıp kodları değiştirmekden yerine sadece ilgili procedure üzerinde değişiklik yaparak güncellemeyi halletmiş olursunuz. Diğer türlü kodları açıp gerekli değişiklikleri yaptıkdan sonra tüm kullanıcılarda tekrar aynı değişiklikleir dağıtmanız gerekir. Kullanıcıların tamamı aynı bina yada aynı şehirde olmaya bilir tüm şehirlere bağlanmak yada tek tek dolaşmanın maliyetini ve zaman kaybını siz düşünün. En sevdginiz arkadaşınız evlenirken siz o gece başka bir şehirde kös kös oturmuş güncellemeleri yapıyor olabilirsiniz (!! ihtimal tabi)
Bunlar belli başlı Stored Procedure kullanım amaçları daha birçok sebepten dolayı Stored Procedureler kullanılabilir. Ama dikkat edilemesi gereken bazı şeyler var nerde zaman Stored Procedure kullanılması gerektigini iyi kestirmek gerek olura olmaza S.P yazılmaz.
Bu kadar bilgiden sonra artık kod yazılımda keyfimiz yerine gelsin.
İşe önce bir tablo oluşturmakla başlıyoruz.
CREATE TABLE [dbo].[Musteri]
(
[ID] [int]
IDENTITY(1,1)
NOT NULL,
[ADI] [varchar](50)
NULL,
[SOYADI] [varchar](50)
NULL,
[BAKIYE] [float]
NULL
)
ON [PRIMARY]
Sıra geldi Procuderimiz oluşturmaya;
Burdaki en önemli kısım
@ADI ve
@SOYADI parametrelerinin
yönünün Output olması.
Output parametreler işlemler sonucu elde edilen sonucları geriye döndürmek için kullanılır.
SP ler bir deger döndürebilirler ama dönmesi gereken sonuç birden fazlasaysa Output kullanmanız işinizi kolaylaştırır.
C# da ki out anahtarıyla aynı amaç için kullanılır.
Not: Alter Proc Musteriler komutuyla değişiklikleri kaydedebilirsiniz.
Create Proc Musteriler
@ID int,
@ADI varchar (50) output,
<--
@SOYADI varchar (50) output
<--
As
Select @ID=ID, @ADI=ADI,@SOYADI=SOYADI From Musteri Where
ID=@ID
--parametre olarak aldıgımız @ID ye göre arama yaptık dönen sonuçları @ADI,@SOYADI output parametreleriyle geri döndürdük.
Şimdi de sıra geldi C# kodlamaya;
Gerekenler; 1 buton 3 textBox
projemize
using System.Data.SqlClient; ad uzayını eklemeyi unutmuyoruz
devammmmm....
private void button1_Click(object sender, EventArgs e)
{
string conSrt = String.Format("Server={0};Database={1};Uid={2};Pwd={3}", ".", "Test", "sa", "123456");
SqlConnection sqlCon = new SqlConnection(conSrt);
//Bağlantımızı oluşturduk.
SqlCommand cmd = new SqlCommand("
Musteriler", sqlCon);
//Hangi Procedure yi kullanıcagımızı belirtiyoruz. Musteriler bizim S.P adımızdı
cmd.CommandType = CommandType.StoredProcedure;
//Komut tipimizde StoredProcedure kullanacagımızı belirtiyoruz.
cmd.Parameters.Add("@ID", SqlDbType.Int);
//Parametrelerimizi ekliyoruz
cmd.Parameters.Add("@ADI", SqlDbType.VarChar, 50);
cmd.Parameters.Add("@SOYADI", SqlDbType.VarChar, 50);
cmd.Parameters["@ID"].Value = Convert.ToInt32(textBox1.Text);
// Arama yapacagımız ID noyu içeri yolluyoruz. Procedurede tipimiz int oldugu için int tipine Convert etmemiz gerekiyor.
cmd.Parameters["@ADI"].Direction = ParameterDirection.Output;
//Parametremizin akış yönünü belirtir.Hatırlasınız bu iki parametreyi output parametre verdiğimişdik
cmd.Parameters["@SOYADI"].Direction = ParameterDirection.Output;
sqlCon.Open();
// Tüm hazırlıklar tamam olduguna göre artıkbağlantımızı açalım
cmd.ExecuteNonQuery();
// komutu çalıştırdık
textBox2.Text = cmd.Parameters["@ADI"].Value.ToString();
//Sonuçları textBoxlara atalımtextBox3.Text = cmd.Parameters["@SOYADI"].Value.ToString();
// Sonuçlar object tipinde geldiği için ToString() metodunu kullanarak string e çevirmeniz gerekir.
}
Her zaman ki gibi amacımız kabaca konuyu anlatmak detaylar sizin ihtiyaçlarınıza göre şekillenecektir.
İyi çalışmalar...