SQL tarafında yazmış olduğumuz store procedure ‘leri, uygulamalarımızın içerisine kolayca dahil edebilmemiz mümkündür. SqlDataAdapter yardımı ile bu işlemi gerçekleştirebiliriz. Anlaşılması daha kolay olduğundan, örnek üzerinden devam edelim.

AdventureWorks veri tabanını kullanarak kullanarak devam ediyor olacağım. Bölgelere göre toplam satış tutarlarını veren bir procedure yazalım.

CREATE PROC [dbo].[USERSP_BolgelereGoreSatis]

AS   

BEGIN

      SELECT SST.Name[Bölge Adi], SUM(SOD.LineTotal) [Toplam Satis] FROM Sales.SalesOrderDetail SOD

      JOIN Sales.SalesOrderHeader SOH ON SOD.SalesOrderID=SOH.SalesOrderID

      JOIN Sales.SalesTerritory SST ON SST.TerritoryID=SOH.TerritoryID

      GROUP BY SST.Name

END

Procedure çalıştırıldığında aşağıdaki gibi bir görüntü elde ederiz.

image

Şimdi de visual studio açarak bir windows form uygulaması başlatalım. Form üzerine bir adet DataGridView ve bir adet button yerleştirelim.

image

Button’un click event’ine bağlanacak bir metot oluşturmak için ‘Getir’ butonuna çift tıklayalım ve metot içerisine aşağıdaki kodları yazalım.

private void btnGetir_Click(object sender, EventArgs e)

        {

            //SqlConnection nesnesi oluştururak Bağlantı nesnesi oluşturuyoruz.

            SqlConnection connection = new SqlConnection(@"data source=.\SQLEXPRESS; initial catalog=AdventureWorks; integrated security=true");

           

            //SqlCommand oluşturarak, constructor metoduna çalıştırmak istediğimiz procedure adını ve bağlantı cümlesini veriyoruz.

            SqlCommand cmd = new SqlCommand("USERSP_BolgelereGoreSatis", connection);

 

            //Sql'den çektiğimiz dataları Ram'de tutmak için DataTable örnekliyoruz.

            DataTable dt = new DataTable();

 

            //SqlDataAdapter oluşturarak constructor metoduna oluşturmuş olduğumuz SqlCommand nesnesini veriyoruz.

            SqlDataAdapter adapter = new SqlDataAdapter(cmd);

 

            //SqlDataAdapter'ın non-static Fill() metodunu kullanarak, gelen sonuçların data table içerisine doldurulmasını sağlıyoruz.

            adapter.Fill(dt);

 

            //Gridview'in DataSource property'sine data table'ı veriyoruz.

            BolgelereGoreSatisDataGrid.DataSource = dt;

        }

Programı çalıştırıp butona tıkladığımızda aşağıdaki görüntü ile karşılacağız.

image

Parametre almayan bir procedure çağrısını örneklemeye çalıştık. Şimdi de parametre alan bir procedure yazarak uygulamamızda kullanmaya çalışalım. Parametre olarak bir alt kategori id alan ve o alt kategoride yer alan ürün listesini döndüren bir procedure yazalım.

ALTER PROC [dbo].[USERSP_ProductBySubCat]

@SubCategoryID INT

AS

BEGIN

      SELECT ProductID,Name,ListPrice,Color,Size FROM Production.Product

      WHERE ProductSubcategoryID=@SubCategoryID

END

Oluşturduğumuz procedure’e parametre olarak 1 değerini vererek çalıştırırsak, aşağıdaki gibi bir görüntü elde edeceğiz.

image

image

Şimdi de uygulamamıza dahil etmek için bir windows projesi başlatalım. Dataları göstermek için bir GridView, parametre değerini girmek için bir TextBox ve işlemleri tetiklemesi için bir buton yerleştirelim.

image

Butonumuz tıklandığında çalışacak olan metodu yazalım.

private void btnGetir_Click(object sender, EventArgs e)

        {

            //SqlConnection nesnesi oluştururak Bağlantı nesnesi oluşturuyoruz.

            SqlConnection connection = new SqlConnection(@"data source=.\SQLEXPRESS; initial catalog=AdventureWorks; integrated security=true");

           

            //SqlCommand oluşturarak, constructor metoduna çalıştırmak istediğimiz procedure adını ve bağlantı cümlesini veriyoruz.

            SqlCommand command = new SqlCommand("USERSP_ProductBySubCat", connection);

            command.CommandType = CommandType.StoredProcedure;

 

            //Parametre değerlerini vermek için SqlParameter tipini kullanıyoruz.

            SqlParameter parametre = new SqlParameter("@SubCategoryID", SqlDbType.Int);

            parametre.Value = txtAltKategoriId.Text;          

            command.Parameters.Add(parametre);

 

            //Sql'den çektiğimiz dataları Ram'de tutmak için DataTable örnekliyoruz.

            DataTable dt = new DataTable();

 

            //SqlDataAdapter oluşturarak constructor metoduna oluşturmuş olduğumuz SqlCommand nesnesini veriyoruz.

            SqlDataAdapter adapter = new SqlDataAdapter(command);

 

            //SqlDataAdapter'ın non-static Fill() metodunu kullanarak, gelen sonuçların data table içerisine doldurulmasını sağlıyoruz.

            adapter.Fill(dt);

 

            //Gridview'in DataSource property'sine data table'ı veriyoruz.

            ProductGridView.DataSource = dt;

        }

Programımızı test ettiğimizde aşağıdaki gibi bir sonuç ile karşılacağız.

image

Günümüz teknolojisinde ORM araçları ile bu tarz işlemler çok daha kolay bir şekilde yapılabilmektedir. İlerleyen zamanlarda Entity Framework kullanarak Store Procedure’lerimizi modelimize nasıl dahil edip kullanabileceğimiz hakkında bilgiler vermeye çalışacağım.



0 yorum:

Yorum Gönder