SQL Server 2005 İçerisinde ASSEMBLY Kullanımı - 1
SQL Server 2005 konulu bu ilk makalede, SQL Server 2005 ile gelen en önemli yeniliklerden biri olan Assembly kullanımı kavramına değinerek, SQL Server ile .NET Framework' ün artık birbirlerine ne kadar yakın katmanlar olduğunu anlamaya çalışacağız.
.NET teknolojilerinin microsoft tarafından duyurulması ile birlikte veritabanı yönetim sistemi olarak SQL Server kullanılması microsoft tarafından oldukça desteklenmiştir. SQL Server veritabanımızda tutulan veriye, en hızlı en kolay yoldan ulaşabilmek adına .NET içerisine System kütüphanesi altında SqlClient sınıfı mevcuttur. Bu sınıf sayesinde .NET kodlarımız içerisinden SQL Server'ımıza rahatlıkla bağlanabiliyor ve her türlü sorguyu çalıştırabiliyoruz. Fakat bu durumda bile halen, veritabanımız, uygulamamız içerisinde ayrı bir katman, .NET kodlarımız ise bununla hızlı bir şekilde haberleşebilen diğer bir katman olarak bulunmakta. Fakat SQL Server 2005 ile birlikte artık bu iki katman birbiri ile o kadar iç içe oldu ki, SQL Server veritabanımız içerisinde .NET kodları yazabilmekte, daha önceden yazdığımız Assembly'leri çalıştırabilmekteyiz. Bu noktada assembly kavramının ne olduğu tanımlayacak olursak; teknolojik olarak dll uzantılı bir bileşen .NET içersinde assembly olarak adlandırılır diyebiliriz. Bir assembly tek bir dll'den oluşabileceği gibi resim ve diğer dosya bileşenlerinin toplamını da ifade edebilir.
Kurulum sırasında SQL Server 2005 ile birlikte gelen .NET Framework 2.0 tarafından yazdığımız .NET kodları derlenmekte ve tamamen veritabanı sunucusu üzerinde kodlar işlenerek SQL Server tarafından bir sonuç üretilmektedir. Teknik altyapıyı irdeleyecek olursak SQL Server 2005 ile birlikte, neden .NET Framework kurulduğunu daha net anlayabiliriz.
.NET Runtime Sunucusu Nedir? Bir runtime sunucusu, .NET runtime (.NET uygulamalarını çalışmasını sağlayan Framework içerisindeki çekirdek yapı) uygulamasını belleğe yükleyen ve uygulama kodunu derleyerek çalıştıran herhangi bir process'dir şeklinde tanımlanabilir. Bu konuda en sık kullanılan senaryo; windows shell içerisinde bulunan bir programın çalıştırılması ve gerekli dll dosyalarının belleğe yüklenmesi şeklindedir. Bir runtime host , MSCORE.DLL içresinden ICorRuntimeHost yada CorBindToRuntimeEx kullanarak çalışma zamanı uygulamasını belleğe yükler. Bunu yaparken de , server yada workstation bilgisi,CLR (Common Language Runtime) versiyonu, çöp toplayıcı (garbage collector) davranışları ve uygulama alanı (Application Domain) üzerinde anında hata ayıklama (Just-In-Time Debugging) yapısı gibi birtakım parametreleri sisteme iletir.
Çalışma Zamanı sunucusu (Runtime Host) olarak SQL Server Yukarıda anlatılan yapının dışında, SQL Server tarafından dikkat edilmesi gereken diğer bir nokta da güvenlik ve performans unsurudur. SQL Server tarafından kullanılan yapıyı aşağıdaki grafik ile özetlemek mümkündür.
Yukarıdaki anlatılan yapı ile birlikte artık SQL Server, ASP.NET yada Internet Explorer gibi, yazdığımız kodları derleyen mekanizmaya sahip özelleştirilmiş bir çalışma zamanı sunucusu olarak da hizmet vermektedir.
Bu yapı bize neler kazandırıyor? En önemli yenilik; artık yazdığımız .NET kodlarımızı uygulama tarafında yazıp SQL Server'a bağlanarak gelen veriye göre işlem yapmak yada veritabanı tarafında standart T-SQL kodları yazmak zorunluluğumuz ortadan kalkıyor. Veritabanı kısmında da .NET kodları yazabiliyor ve bunları derleyerek uygulamalarımız içerisinde kullanabiliyoruz. Kısacası artık sadece .NET sınıflarını kullanarak stored procedure yazmak ve veritabanına kaydetmek mümkün.
Bu kadar teknik altyapı detayından sonra tekrar ana konumuza dönelim ve yazılan .NET Assembly'lerinin SQL Server içerisinden nasıl kullanıldığına bir göz atalım.
.NET Assemlly'leri SQL Server içerisinde saklamak .NET Assembly'leri CRETAE ASSEMBLY ifadesi ile SQL Server 2005 içerisinde saklanır. Aşağıdaki kod satırı, sadece dll dosyasını veritabanı içerisine tanımlamakla kalmaz ona daha sonra kullanabilmek üzere sembolik bir isim de verir.
Burda dikkat edilmesi gereken önemli bir ayrıntı da; dll dosya yolunun veritabanı sunucusunun kurulu olduğu makinada bulunma zorunluluğunun olmamasıdır. Yerel ağ içerisinde bulunan herhangi bir makinadaki dosya da veritabanımız içersinde tanımlanabilir. Ayrıca SQL Server birden fazla dosya içeren assembly'lerinde kayıt edilebilmesine izin verir. Aşağıda CREATE ASSEMBLY ifadesi ile ilgili detaylı sözdizimini bulabilirsiniz.
Assembly bilgileri SQL Server 2005 içerisinde 3 adet tabloda saklanır. Bu tabloların adları, içerdikleri kolonlar ve tutulan veri tipleri aşağıda listelenmektedir.
Tablo : sys.assemblies
Tablo : sys.assembly_references
Tablo : sys.assembly_files