SQL Server ile Dinamik Sayfalar Üretmek
Günlük olarak gazete sitelerini dolaşırken bir şey dikkatimi çekti. www.milliyet.com.tr sitesinin dosya uzantısı HTML ! Sanıyorum bir yada bir kaç HTML editörü her gün ona haber sayfasını gün be gün oluştuyor. Ne dersiniz ?
Tabii günümüz teknolojisinin bize sunduğu imkanları düşününce pekte olur şey gibi gelmiyor. Peki ama bu HTML sayfaları nasıl oluşturuluyor ? Milliyet.com.tr sitesi mimarlarının uyguladıkları tekniği bilmiyorum ama birazdan bu işi SQL Server’a yaptırmanın yolunu inceleyeğiz.
Peki sunucu taraflı ( server side ) programlama dilleri mevcut ve gayet güzel işimizi görüyorken böyle bir cambazlık yapmamızın sebebi nedir ? Cevap : Performans.
Dinamik Mi ? Statik Mi ?
Dinamik Sayfalar : IIS üzerindeki ASPX uygulamaları istemci tarafından çağrıldığında ilgili sayfa kodları C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll tarafından makine diline çevirilir ve kodda istenilen işlemleri gerçekleştirdikten sonra kullanıcıya HTML çıktı iletir. Örneğin : http://www.vatanim.com.tr/root.vatan?exec=haberdetay&Newsid=24983&Categoryid=4

Statik Sayfalar : IIS üzerinde bulunan HTML, TXT, XML gibi uzantıya sahip dosyalar ise herhangi bir derleyici tarafından bir işleme tabi tutulmadan direk kullanıcıya gönderilir. Örneğin : http://www.milliyet.com.tr/2006/01/30/index.html
Şimdi bizde Örnek olarak bizde aşağıdaki tabloda bulunan 4 adet haberi bir HTML sayfada gösterelim
Örnek Tablomuz :

Bu yazının konusunu oluşturan System Stored Procedure’müz ise sp_makewebtask
sp_makewebtask toplamda 32 adet parametre kabul ederek oldukça geniş bir çalışma alanı sağlıyor. Biz basit olarak 4 parametresini kullanarak ortaya kullanışlı bir sayfa çıkaracağız.
Ancak SQL Server 2005 te bu System Stored Procedure’ü çalıştırmadan evvel ufak bir ayar yapmamız gerekiyor. SQL Server te güvenlik nedeniyle bu sp_makewebtask nin kapalı geliyor.
Gerekli izinleri vermek için -> All Programs -> Microsoft.SQL Server 2005 -> Configration Tools -> SQL Server Surface Area Configuration menüsü izlemek gerekiyor. Çıkan pencerede en alttaki Surface Area Configration for Features linkine tıklayıp yeni açılacak olan pencerede bulunan menüden Web Asistant seçilip Enable Web Asistanst checkbox’ını seçmemiz gerekiyor.
Öncelikle çıktının üretileceği bir Tamplate dosyaya ihtiyacımız var.
<HTML>
<HEAD>
<TITLE>BenimSitem</TITLE>
</HEAD>
<BODY>
<h1>BenimSitem</h1>
<%begindetail%>
<h4><%insert_data_here%></title></h4>
<font face="Verdana" size="1"><%insert_data_here%></font>
<hr>
<%enddetail%>
</BODY>
</HTML>
C:\Inetpub\wwwroot\benimsitem\ Haberler.TPL

Burada sarı ile belirtilen yerler arasında kalan bölge çalıştırılacak SQL ifadesinin döndüreceği satır sayısı kadar yazdırılacak. Turkuaz ile belirtilen bölgeler ise her satır için kolon sırasına göre döşenecek verilerin yazdıralacağı alanları belirtiyor.
Örneğin SELECT Baslik,Metin FROM Haberler şeklindeki bir SQL Sorgusunda <h4> etiketleri arasında Baslik <font> etiketleri arasında ise haber gelecektir.
Artık sp_makewebtask sp mizi kullanabiliriz.
EXECUTE
sp_makewebtask
@templatefile = 'C:\Inetpub\wwwroot\benimsitem\Haberler.TPL',
@outputfile = 'C:\Inetpub\wwwroot\benimsitem\Haberler.HTML',
@query = 'SELECT Baslik,Metin FROM Haberler',
@codepage = 1254
GO
templatefile : Oluşturulacak HTML belgesinin referans alınacağı tamplate dosyası.
@outputfile : HTML çıktının oluşturulacağı adres.
@query : Üretilecek HTML belgesinin içeriğini dolduracak SQL sorgusu.
@codepage : HTML sayfasının karakter seti.
Yukarıdaki SQL ifadesini çalıştırdığımızda C:\Inetpub\wwwroot\benimsitem\Haberler.HTML adresinde HTML dosyamızı görmüş olacağız.
Browser pencemize http://localhost/benimsitem/Haberler.HTML adresini yazdığımıda aşağıdaki gibi bir çıktı elde edeceğiz.

Peki tablomuza Haber eklendiğinde, silindiğinde veya değiştirildiğinde ne olacak ?
Yukarıdaki SQL ifadesini Haberler Tablosu için INSER-UPDATE-DELETE Trigger’ına yerleştirdiğimizde Haber tablomuzda meydana gelecek ufak bir değişiklik sonucu HTML dosyamıza iletilecektir.
CREATE TRIGGER tr_HaberlerHTM
ON Haberler
FOR INSERT,UPDATE,DELETE
AS
EXECUTE sp_makewebtask
@templatefile = 'C:\Inetpub\wwwroot\benimsitem\Haberler.TPL',
@outputfile = 'C:\Inetpub\wwwroot\benimsitem\Haberler.HTML',
@query = 'SELECT Baslik,Metin FROM Haberler',
@codepage = 1254
GO