SQL Server 2005 İçerisinde ASSEMBLY Kullanımı - 2
SQL Server 2005 Assembly kullanımı konulu ilk makalede, assembly adı verilen *.dll uzantılı com objelerimizin SQL Server tarafından nasıl ele alındığını ve belleğe yüklendiğini anlamaya çalıştık. Bugün ise assembly'lerin içerisindeki metotlara SQL Server aracılığıyla nasıl ulaşacağımızı ve kodlarımızda nasıl çağırabileceğimizi inceleyeceğiz. 2005 den önceki SQL Server sürümlerinde, standartları belirlenmiş olan SQL cümlecikleri uygulamalarımız için yeterli olmadığında, veritabanımızda çalışan sorgulara yeni özelliklerle genişletmek için T-SQL adı verilen bir dil kullanıyorduk. Fakat T-SQL, Microsoft SQL Server dışında hiçbir veritabanı yönetim sistemi tarafından tam anlamıyla desteklenmediğinden yazdığımız kodlar taşınabilirlik yeteneğinden çok uzaktı. Ayrıca T-SQL'in yazılım geliştirme konusunda bize sağladıklarının çok sınırlı olması sebebiyle çeşitli com objeleri yaratarak T-SQL ifadelerimizi güçlendirmemiz gerekmekteydi. Bu uygulamaları da Visual Basic 6.0 yada C++ kullanarak kodlamak, daha sonra SQL Server içerisinde standart olarak bulunan sp_OACreate depolanmış yordamı ile veritabanımız içinden kullanılabilir bir obje haline getirmek zorundaydık. Bu durumda da bize tanınan esneklik oldukça sınırlıydı. Örneğin; SQL Server Mail servisinin kullanım zorluğu ve ihtiyaçlarımıza tam olarak cevap vermediği durumlarda, da önceden yazılmış olan COM objelerini sp_OACreate ile yaratıp SQL Server üzerinden mail gönderebiliyorduk. Fakat bu şekilde COM objeleri kullanmak zamanla, bu objeleri VB veya C++ ile kodlayarak geliştirmenin çok karmaşık olması sebebiyle genelde vakit kaybı olacağı düşünüldü herkes tarafından kaçınılan bir yöntem haline geldi. Ve sonunda SQL Server 2005 ile birlikte bu yapı tamamen değiştirilmekte. Bundan sonra sınırlı T-SQL ifadelerinin yerine .NET Framework tarafından desteklenen her türlü yazılım geliştirme dilini veritabanımız içinden kullanabileceğiz. Bu yapıyı bize sağlayan ise, işleyiş mantığı serinin ilk makalesinde anlatılan SQL Server 2005 ile birlikte entegre gelen CLR (Common Languagage Runtime) olmaktadır. Yazının bundan sonraki bölümlerinde assembly metotlarını uygulamamızda nasıl kullanacağımız örneklerle anlamaya çalışalım. İnternet üzerinden alışveriş yapılan bir sitemiz olduğunu düşünelim. Burada, kullanıcıların alışveriş sepetlerini görüntüledikleri ekrandaki birtakım hesaplamaları assembly kodumuz içinde yapalım ve bir view vasıtasıyla sepetlerini kullanıcılarımıza gösterelim.
Önce, yukarıda içeriği görülen SepetIslemleri sınıfımızın içerisindeki fonksiyonların neler olduğuna bakalım.
NetFiyatHesapla : Belirtilen ürün fiyatı için adet ve kdvOran parametrelerini alarak ürün için bir ara toplam değeri oluşturan fonksiyonumuz.
KargoUcretiHesapla : Yukarıdaki senaryomuzda, her bir ürün için ürün ile ilgili çeşitli kriterlere bakarak ürün bazlı kargo ücreti hesapladığımız düşündük. Buradaki KargoUcretiHesapla fonksiyonumuz, ağırlık ve hacim gibi bilgilere bakarak ürün ile ilgili kargo şirketine göre bir kargo fiyatı hesapamakta kullanılıyor.
ToplamFiyatHesapla : Bu fonksiyonumuz ise; ürün için hesaplanan ara toplam değeri ile kargo ücretinin toplamını bularak ürünün toplam fiyatını bizim için hesaplıyor.
Artık SepetIslemleri sınıfımızı Visual Studio ortamında yazıp derleyebilir ve daha sonra oluşan SepetIslemler.dll adlı assembly dosyamızı SQL Server veritabanımız içersinde rahatlıkla kullanabiliriz. Bunu yapmak için; önce assembly'mizi referans göstererek gerekli fonkisyonları oluşturalım ve sonra vUrunSepetFiyatlar adlı view'ımızı yaratarak sepetlerindeki ürünleri kullanıcılarımıza gösterelim. Konu ile ilgili aşağıdaki kod bloğunu inceleyebilirsiniz.
Burada gösterilen hesaplama yapısını T-SQL kullanarak da hazırlamak mümkündü. Ama SQL Server 2005 ' in bize sunduğu bu yeni imkanlarla, hesaplama işleminin T-SQL ifadelerine göre çok daha kolay kullanılır bir şekilde Vİsual Basic dile ile yapılabileceğini gördük. Bu sayede artık çok daha karmaşık sorgu ve kullanıcı tanımlı fonksiyonları, .NET dillerinin bize sunduğu bütün imkanlarla, çok daha hızlı ve performanslı bir yapıyla hazırlayabilme imkanına kavuşmuş oluyoruz.
Daha önceki makalemizde assembly ifadelerinin SQL Server 2005 tarafından nasıl ele alındığını, SQL Server 2005 ile birlikte gelen CLR yapısı sayesinde .NET dilleri ile yazılmış kodların nasıl derlenip çalıştırıldığını inceledik. Bugün ise, .NET dillerinden Visual Basic.NET ile yazılmış fonksiyonların assembly yaratılarak SQL Server tarafından çağrılıp, SELECT cümlelerimiz içersinde pratikte nasıl kullanılacağını gördük.
Bir sonraki makalede farklı bir konu ile görüşmek ümidiyle...