TÜRKİYE'NİN BİLGİ TEKNOLOJİLERİ DERGİSİ BİZE ULAŞIN   |   DÜNYA YAYINCILIK A.Ş.  
BYTE.com.tr Ana Sayfa
Üye Girisi

Eğer üyeyseniz lütfen
buraya tıklayınız.

BYTE Online'a
üye olmak istiyorum.
BYTE Forumlari
BYTE Ögretim
Okur Hatti
Web sitenizi dergimizde tanıtmak, BYTE Dergi, CD, TV ve Online ile ilgili görüş ve önerilerinizi bizlere ulaştırmak için

Okur hattı bölümünü kullanabilirsiniz.

Okur Hatti
Makaleler SQL Server 2005 ve CLR Entegrasyonu
SQL Server 2005 ve CLR Entegrasyonu
Bu yazımızda veritabanı dünyasına farklı bir bakış açısı getirecek olan SQL Server 2005’in CLR entegrasyonunu inceleyeceğiz.

Saklı Yordamlarımızı .NET İle Kodlayalım

SQL Server 2005 (Yukon) getirmeyi vadettiği yeni özellikleri ile veritabanı programlama konusunda bambaşka bir bakış açısı sunuyor. SQL Server 2005’in getirdiği bir çok yeni özelliğin arkasında CLR ile entegrasyonu yatıyor.

.net framework'un çekirdeği olan CLR SQL Server 2005 ile birleştirilmiş durumda. Yani artık veritabanı sunucumuz .net'çe konuşabiliyor. Örneğin C# ile yazdığınız kodları SQL Server 2005 kendi üzerinde çalıştırıbiliyor ve bu kodları VB.NET ile yazdığımız kodlarla hiç bir sıkıntı yaşamadan entegre edebiliyor..

Şu ana kadar yapılagelmiş yöntem iş katmanını bildiğimiz yüksek seviyeli programlama dilleri ile oluşturmak, veri katmanını ise veritabanı sunucumuzun bize sağladığı T-SQL olanaklarıyla oluşturmaktı. Genel problemler için gayet makul olan bu yöntem veri katmanında, veritabanı dışında bazı işler gerçekleştirmek istediğimizde yetersiz kalmaktaydı. Örneğin SQL Server üzerinde oluşan bir hatanın Event Log (Seyir kaydı) olarak yazılmasını T-SQL ile sağlamak pek kolay olmamaktaydı. Genişletilmiş saklı yordamlar (extended stored procedures) ise bunu c++ dili ile mümkün kılmakta, fakat uyulması gereken arayüzler ve kodlama zorluğu bu sorunu pratik olarak çözmemekteydi.

SQL Server 2005 bu tarz işlemleri rahatlıkla yapabilmemize olanak sağlıyor. Peki nasıl mı ? Bu soruyu bir örnek ile cevaplandıralım.

SQL Server 2005 altında .net kodlarını çalıştırabilmek için yapılması gerekenler adım adım şöyledir;

1. .net kodlarıyla bir sınıf kütüphanesi oluşturun ve derleyin. (SQL Server 2005 .exe uzantılı dosyaları çalıştırmaz. .dll uzantılı derlenmiş kütüphaneleri çalıştırır.) Burada dikkat edilmesi gereken sınıfın public yordamların ise static (vb.net'te shared) olması gerekliliğidir.
2. Oluşturduğunuz assembly'i SQL Server 2005’e kaydedin
3. Assembly'i sarmalayacak bir veritabanı nesnesi (stored procedure, user defined function, trigger ..) oluşturun.
4. Oluşturduğunuz nesnesi istediğiniz yerden kullanın.

Şimdi bu adımları sırasıyla uygulayalım. Önce  csYukonOrnek isimli yeni bir class library projesi oluşturun ve otomatik olarak oluşturulan şablon sınıf dosyasının ismini csYukonLibrary.cs olarak değiştirip içine aşağıdaki kodları yazın;

using System;
public class
csClassYukon
            {
                       
public static int csFunctionCLRToplama(int a, int
b)
                                   {
                                              
return
a + b;
                                   }
            }



Bu fonksiyondaki işlemleri T-SQL kullanarak basit bir saklı yordam ile yapabilirdik. Bu örnek için CLR kullanmak pek mantıklı olmasa da yoğun ve karmaşık işlemlerin CLR ile yapılması çoğu iş yükünü ortadan kaldıracaktır.

Derlediğimizde oluşan dll 'i aşağıdaki, SQL Server 2005 Management Studio içine yazacağımız kod ile sunucumuza kaydedelim;

CREATE ASSEMBLY asmYukon FROM 'C:\csYukonLibrary.dll'
-- Oluşturduğunuz dll'in yolunu yazmaya dikkat edin !


Bu sayede assembly artık sunucumuza kaydedilmiş durumdadır. Dll dosyasını silsek bile SQL Server 2005 içinden bu kütüphanenin fonksiyonlarını kullanmaya devam edebiliriz.

Şimdi de oluşturacağımız saklı yordam ile bu assembly'i sarmalayalım;

CREATE PROCEDURE [dbo].[spCLRToplama]
@IlkDeger
[int]
,
@IkinciDeger
[int]

AS
EXTERNAL NAME [asmYukon].[csClassYukon].[csFunctionCLRToplama]

Bu bölümde dikkat ederseniz T-SQL'e yeni eklenen EXTERNAL NAME deyimi ile oluşturduğumuz assembly'nin mantıksak olarak tam yolunu belirtiyoruz. Dikkat edilmesi gereken nokta .net ile oluşturduğumuz fonksiyon ile stored procedure aynı tip parametreler almak zorundadır. (Bu örnekte her ikisi de integer tipinde iki parametre almaktadır.) Artık bu stored procedure sayesinde .net ile oluşturduğumuz bir fonksiyonu istediğimiz yerde kullanabiliriz.

Buraya kadar yaptığımız işlemler sonucu bir assembly'i (asmYukon) Yukon üzerinde çalışmak üzere kayıt ettik ve onu kullanacak bir stored procedure (spCLRToplama) oluşturduk. Management Studio'dan kontrol ettiğimizde bu nesneleri aşağıdaki gibi görebiliriz ;

Son olarak oluştur oluşturduğumuz stored procedure üzerinden .net kodlarımızın çalıştığını kontrol edelim ;

DECLARE @Sonuc INT
EXECUTE @Sonuc = spCLRToplama 3 , 5
SELECT @Sonuc AS CLRToplama



 Kasım Gülcan Globus BYTE'ın yazarlarındandır. Kendisine kasimgulcan@sqlnedir.com adresinden ulaşabilirsiniz.






BYTE MAYIS 2009



BYTE dergisinden hangi bölümün artırılmasını istersiniz?
Donanım İncelemeleri
Yazılım İncelemeleri
Nasıl Yaparım (pratik)



 



  ANA SAYFA   |   FORUM   |   ABONE OLUN   |   BİZE ULAŞIN

Sitelerimiz: pcworld.com.tr | computerworld.com.tr | dunya.com | dunyastore.com

©2004 - 2009 BYTE Türkiye