12 Mayıs 2010 Çarşamba

ADO.NET tarafında SQL function nesnesi kullanmak

Selam dostlar.

Biliyorsunuz, Microsoft SQL Server tarafında kullandığımız function isimli nesnelerimiz var. Bu nesnelerin kullanım amacı nedir ve ADO.NET tarafından nasıl çağrılır? Biraz bu konulara değinelim.

Arkadaşlar, ilk başta şu sorunu bir çözelim stored procedure ile function arasında nasıl bir fark var? Veritabanındaki her işi stored procedure ile yapmak mümkün mü? Bu konuyu biraz masaya yatıralım (Bazı SQL'ciler, her şeyi stored procedure'ler ile yapabileceklerini iddia ederler).

Function ile Stored Procedure arasındaki en büyük fark şudur; bir stored procedure içindeki işlem, geriye ya herhangi bir tablodan bağımsız bir değer döndürür ya da belirli bir tabloya (ya da tablolara) bağlı bir result set (sonuç grubu J) oluştururlar. Oysa bir function nesnesi (Table döndürenleri hariç) , herhangi bir sorgu ifadesi içinde kullanılabilir. Böylece döndürdüğü değeri elde etmek için kullandığı parametreyi kendiniz atayabileceğiniz gibi, herhangi bir tablonun herhangi bir kolonunu da verebilirsiniz…

Örneğin, verilen parametrenin KDV eklenmiş halini hesaplamak amacıyla şöyle bir fonksiyon oluşturalım:

CREATE FUNCTION KDVHesapla

(@Fiyat money)

RETURNS money

AS

BEGIN

DECLARE @donenDeger money

SET @donenDeger = @Fiyat * 1.18

RETURN @donenDeger

END

Bakın bu fonksiyonu şu şekilde kullanabilirsiniz:

SELECT dbo.KDVHesapla(30)

Bir de aşağıdaki gibi kullanabilirsiniz:

SELECT ProductName,dbo.KDVHesapla(UnitPrice) FROM Products

Gördüğünüz gibi, function nesnemi her türlü sorgu ile kullanabilirim. Haydi yapabilirseniz aynı şeyi Stored Procedure ile yapın J

Burada, function'dan ve kullanımından bahsetmişken, aslında ADO.NET tarafından nasıl çağrılması gerektiğini de anlatmış olduk. Function nesnesi, zaten sorgu ile birlikte kullanıldığı için ADO.NET tarafında ekstra bir işleme gerek duymazsınız.

Yani:

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True");

SqlDataAdapter da = new SqlDataAdapter("Select ProductName, dbo.KdvHesapla(UnitPrice) from Products", con);

DataTable dt = new DataTable();

da.Fill(dt);

dataGridView1.DataSource = dt;

Haliyle, normal bir sorgu çekmekten hiçbir farkı yok.

Kendinize iyi bakın.

İyi çalışmalar.

Kaynak: http://www.turkayurkmez.com/post/2008/09/13/ADONET-tarafinda-SQL-function-nesnesi-kullanmak.aspx

Hiç yorum yok:

Yorum Gönder