<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tunahan.net &#187; Source</title>
	<atom:link href="http://www.tunahan.net/tag/source/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tunahan.net</link>
	<description>Tunahan H. MADEN Personal Page</description>
	<lastBuildDate>Thu, 01 Jul 2010 23:48:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQL &#8211; Stored Prosedür Oluşturmak</title>
		<link>http://www.tunahan.net/2010/01/29/sql-stored-prosedur-olusturmak/</link>
		<comments>http://www.tunahan.net/2010/01/29/sql-stored-prosedur-olusturmak/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:25:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[EXEC]]></category>
		<category><![CDATA[ISBN]]></category>
		<category><![CDATA[Kod]]></category>
		<category><![CDATA[Oluşturmak]]></category>
		<category><![CDATA[Procedure]]></category>
		<category><![CDATA[Prosedür]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Stored]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=136</guid>
		<description><![CDATA[Prosedür ne demektir?
Nesneye dayalı programlama bu kadar popüler değilken, programlar sadece prosedür denilen parçacıklardan oluşurdu. Her bir prosedür, belli bir işlevi yerine getimrke için özenle yapılandırılmış program parçacığıdır. Mesela, iki sayı alıp bunların toplamlarını hesaplayan bir kod parçasını toplayıcı adında bir prosedür içerisine paketleyebiliriz. Bir prosedür, başka bir prosedür içerisinden çağrılabilir. Bu da sık kullanılan [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Prosedür ne demektir?</p>
<p></strong>Nesneye dayalı programlama bu kadar popüler değilken, programlar sadece prosedür denilen parçacıklardan oluşurdu. Her bir prosedür, belli bir işlevi yerine getimrke için özenle yapılandırılmış program parçacığıdır. Mesela, iki sayı alıp bunların toplamlarını hesaplayan bir kod parçasını toplayıcı adında bir prosedür içerisine paketleyebiliriz. Bir prosedür, başka bir prosedür içerisinden çağrılabilir. Bu da sık kullanılan işlemler için yazılmış kodların bir defa yazılıp çok defa kullanılmasını böylelikle de programlamayı kolyalaştırmayı amaçlar.</p>
<p>Saklı prosedürler, bir çok gelişmiş programlama dilindeki fonksiyon yapılarına karşılık gelir. Birden fazla işlemi, paketlenmiş bir halde bir tek komut ile çalıştırmamız gerektiğinde stored procedures kullanılır. İşlemden kasıt T-SQL ile yapılabilen her şeydir.</p>
<p>Stored procedure, 1980’li yılların sonunda Sybase SQLServer ile birlikte kullanıma girdi. En büyük özelliği sorguların önceden hazırlanması(derlenemesi) ve VTYS ile aynı uzayda çalışmasından dolayı daha hızlı sonuç vermesidir.</p>
<p>Bir SP oluşturulduktan sonra, veritabanı sunucusunda saklanır. Her ihtiyaç duyulduğunda aynı sp defalarca çağrılabilir. Cursor gibi oturum kapandığında silinmez.</p>
<p>Network bazlı çalışmalarda ağ trafiği ve sistem kaynaklarının kullanımın düzenleyerek de performans artışı sağlar. Bir dize işlem, bir tek paket içerisinde yer alır. Gerektiğinde bir tek komut ile tetiklenebilir. Paketin tamamı çalışıncaya kadar istemde bulunan terminale hiçbir şey gönderilmez. Tüm komutlar bittiğinde bir tek sonuç gönderilir. Bu da bazı durumlarda ağ trafiğini rahatlatır.<br />
Bir SP sistem tarafından oluşturulduğu anda şu aşamalara tabi tutulur:</p>
<p><strong>1.</strong> SP’nin bileşenleri parçalara ayrıştırılır<br />
<strong>2.</strong> Veritabanı içerisinde table,view gibi başka nesnelere atıfta bulunan referanslar varsa, geçerli olup olmadıkları kontrol edilir.(Geçerli:1-nesne varmı, 2-izin var mı)<br />
<strong>3.</strong> Kontrollerden geçen SP’nin adı sysobjects tablosuna, kodları ise syscomments tablosuna saklanır.<br />
<strong>4.</strong> Bu işlemlerle birlikte derleme işlemi yapılır. Normalizasyon işlemleri olarak da anılan bu işlemler sonucunda, ağaç şeması elde edilir. Bu şema da sysprocedures tablosunda saklanır.<br />
<strong>5.</strong> SP herhangi bir anda çağrıldığında, ilk kez çalışıyorsa bu işlemler gerçekleştirilir. İlk sefa çağrılmıyorsa, kontrol, sorgulama ağacı oluşturma işlemleri yapılmaz ve oldukça hızlı bir şekilde SP’nin derlenmiş hali çalışır. Bundan dolayı sp’ler derlenen nesnelerden biri olarak anılır.</p>
<p><strong>SP’ler şu faydaları sağlar:</strong></p>
<p><strong>1.</strong> Uygulamanın getirdiği bazı iş kuralları prosedür içinde tanımlanabilir. Bir kez oluştuktan sonra bu kurallar birden çok uygulama tarafından kullanılarak daha tutarlı bir veri yönetimi sağlanır. Ayrıca bir fonksiyonelliğin değişmesi ihtiyacı doğduğunda her uygulama için değişiklik yapmak yerine, sadece bir platformda değişiklik yapılır.</p>
<p><strong>2.</strong> Tüm prosedürler üstün performansla çalışır ancak birden fazla çalıştırılacak olan prosedürler sorgulama planları procedure cache içinde saklandığından daha da hızlı çalışırlar.<br />
<strong>3.</strong> Stored Procedure’ ler SQL Server start ettikten sonra otomatik olarak çalıştırılmak üzere ayarlanabilirler.<br />
4. Stored Procedure’ ler harici olarak kullanılırlar. Trigger’ lardan farklı olarak prosedürler uygulama tarafından ya da script tarafından bir şekilde çağrılmak zorundadırlar. Otomatik devreye giremezler.<br />
<strong>5.</strong> Stored Procedure’ lerın içinde SQL sorgulama diline ek olarak T-SQL komutlarını kullanabiliriz.<br />
<strong>6.</strong>Kullanıcının bir tabloya erişim izni olmasa bile o tablo üzerinde işlem yapan bir stored procedure’ ü kullanma izni olabilir.</p>
<p><strong>SP oluşturma:</strong></p>
<p><span style="background-color: #ffffff;">CREATE PROC [ EDURE ] procedure_name [ ; number ]<br />
[ { @parameter data_type }<br />
[ VARYING ] [ = default ] [ OUTPUT ]  ]<br />
[ ,...n ]</span><br />
<strong>Örnek:<br />
</strong>Çalıştırıldığı tarih itibariyle, aldığı kitapları getirmeyen üyelerin adını veren bir SP yazalım:</p>
<p>CREATE  PROCEDURE sp_cezaliUye<br />
AS<br />
&#8211; Bugünün tarihini al<br />
DECLARE @buGun DATETIME<br />
SET  @buGun = GetDate()</p>
<p>SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @buGun<br />
&#8211; bugünden önce gelmesi gereken ödünç işlemlerindeki üye adını seç.</p>
<p><strong>Daha sonra bu SP şu komut ile çağrılır:</strong></p>
<p><strong>EXEC sp_cezaliUye</strong><br />
&#8211; sp_cezaliUye stored procedure&#8217;ünü çalıştır.</p>
<p>SP üstünde değişiklik yapmak istediğimizde ise,</p>
<p><strong>Sp_helptext sp_adi</strong></p>
<p>Diyerek SP’nin içeriğini görebiliriz.<br />
Daha sonra bu içeriği Query Analyzer kod penceresine yapıştırıp,</p>
<p>ALTER PROCEDURE sp_cezaliUye<br />
AS</p>
<p>DECLARE @buGun DATETIME<br />
SET  @buGun = GetDate()</p>
<p>SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @buGun</p>
<p>Diyerek yeni halini kaydettirebiliriz.</p>
<p><strong>İPUCU:</strong><br />
Bir çok işlemi kod yazmaksızın yapmayı sağlayan Enterprise Manager’i kullanarak sp’leri de kolayca değiştirebilirisiniz. Bunun için Enterprise manager ile bir sp’yi seçip çift tıklamak yeterlidir.</p>
<p><strong>SP’ye parametre yollama:<br />
</strong>Bazen SP’ler dışarıdan parametre alabilirler:</p>
<p><strong>Örnek:</strong><br />
Herhangi bir tarih verildiğinde, bu tarihte süresi bittiği halde teslim edilmeyen kitapları bulan bir SP yazalım ancak tarih olarak bu günden daha büyük bir parametre alamasın. Böyle bir durum olduğunda, bu günün tarihini versin.</p>
<p>CREATE  PROCEDURE <a style="color: #000000; font-family: Arial; text-decoration: none;" href="mailto:sp_cezaliUye_1@referansTarih">sp_cezaliUye_1@referansTarih</a> DATETIMEASDECLARE @buGun DATETIME SET @buGun = GetDate()IF @referansTarih &gt; @buGun SET @referansTarih = @buGun &#8212; şayet, bugünün tarihi referans tarihten küçük ise,<br />
referans tarihi bugünün tarihi ile değiştir.<br />
SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @referansTarih<br />
&#8211; bugün veya daha eski bir tarihte, gelmemiş kitapları alan üyelerin listesini veren sorgu</p>
<p>Bazen dışarıdan gelen parametrelerin isteğe bağlı olması istenebilir.<br />
Bu durumda DEFAULT değer atama seçeneği kullanılır. Şayet dışarıdan parametreye değer atanmazsa, geçerli değer default atanmış değer olarak alınır ve işlem yapılır:</p>
<p><strong>Örnek:</strong><br />
CREATE  PROCEDURE sp_cezaliUye_2<br />
@referansTarih DATETIME = NULL<br />
&#8211; dışarıdan referans tarihi gelmedi ise, NULL olarak kabul et.<br />
AS</p>
<p>DECLARE @buGun DATETIME<br />
SET  @buGun = GetDate()</p>
<p>IF (@referansTarih IS NULL) OR (@referansTarih&gt;@buGun)<br />
SET @referansTarih = @buGun<br />
&#8211; Referans tarih gelmedi ise veya bugünün tarihinden büyük ise, bugünün tarihini al.</p>
<p>SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @referansTarih<br />
Go</p>
<p>şeklinde yazabiliriz. Daha sonra</p>
<p>EXEC sp_cezaliUye_2 @referansTarih=’01.01.2003’</p>
<p><strong>İle veya</strong></p>
<p>EXEC sp_cezaliUye_2<br />
Diyerek sp’yi çağırabiliriz.</p>
<p><strong>DİKKAT:</strong><br />
SP’de bir parametre için default değer tanımı yaparken, bu değerin sabit bir değer veya NULL olması gerektiğine dikkat etmelidir.</p>
<p><strong>İPUCU:</strong><br />
Bazı durumlarda, SP içerisinde SQL ifadesini bir değişkene atamak suretiyle durumlara göre dinamik olarak meydana getirip, daha sonra da onu çalıştırabiliriz. Bu durumda da EXEC fonksiyonu kullanılır. EXEC fonksiyonu, bir stored procedure batch&#8217;in ilk ifadesi değil ise de stored procedure çalıştırılırken kullanılmak zorundadır.</p>
<p><strong>Örnek:</strong></p>
<p>&#8212; Yanlış ifade(çalışmaz):<br />
DECLARE @isim VARCHAR(10)<br />
&#8230;<br />
sp_cezaliUye_2</p>
<p>&#8211; Doğru ifade(çalışır)<br />
DECLARE @isim VARCHAR(10)<br />
&#8230;.<br />
EXEC sp_cezaliUye_2</p>
<p><strong>Örnek:</strong><br />
Kitaplar tablosu üstünde aşağıdaki parametrelere göre arama yapabilecek bir SP yazalım. Parametrelerden gelenler için filtreleme yapılsın.<br />
Dışarıdan alınabilecek Parametreler: ISBNNo, KitapAdi, Yazari, Ozeti</p>
<p>CREATE  PROCEDURE sp_kitapBul<br />
@ISBNNo CHAR(16) =NULL,<br />
@KitapAdi VARCHAR(55)=NULL,<br />
@kitapYazari VARCHAR(55)=NULL,<br />
@KitapOzeti VARCHAR(55)=NULL<br />
AS</p>
<p>DECLARE @sSQL VARCHAR(500)<br />
&#8211; Bir SQL değişkeni tanımlıyoruz<br />
Set @sSQL= &#8216;SELECT * FROM Kitap WHERE 1=1 &#8216;<br />
IF @ISBNNo IS NOT NULL<br />
SET @sSQL = @sSQL + &#8216;  AND ISBNNo = &#8221;&#8217; + @ISBNNo + &#8221;&#8221;<br />
&#8211; ISBNNo parametresi null değilse sorguya ekliyoruz.</p>
<p>IF @KitapAdi IS NOT NULL<br />
SET @sSQL <a style="color: #000000; font-family: Arial; text-decoration: none;" href="mailto:=@sSQL">=@sSQL</a> + &#8216; AND KitapAdi  LIKE  &#8221;%&#8217;  + @KitapAdi +  &#8216;%&#8221;&#8217;<br />
&#8211; KitapAdi parametresi NULL değil ise sorguya ekliyoruz.</p>
<p>IF @KitapYazari IS NOT NULL<br />
SET @sSQL = @sSQL + &#8216; AND KitapYazari  LIKE  &#8221;%&#8217;  + @KitapYazari +  &#8216;%&#8221;&#8217;<br />
&#8212;KitapYazari Null değil ise sorguya ekliyoruz.</p>
<p>IF @KitapOzeti   IS NOT NULL<br />
SET @sSQL = @sSQL + &#8216;  AND KitapOzeti  LIKE  &#8221;%&#8217;  + @KitapOzeti +  &#8216;%&#8221;&#8217;<br />
&#8211; kitapOzeti null değil ise sorguya ekliyoruz.<br />
print @sSQL &#8211;nasıl bir SQL oluşturduğumuzu yazdırıyoruz.</p>
<p>EXEC(@sSQL)<br />
&#8211; bir VARCHAR değişkenin içerdiği T-SQL ifadesini çalıştırıyoruz.</p>
<p>Farklı parametre değerleri ile SP’yi çağırabiliriz:</p>
<p>&#8211; sadece ISBN vererek çağıralım<br />
EXEC Sp_kitapBul @ISBNNo=’12345’<br />
&#8211; ISBN ve KitapAdi parametreleri ile çağırma<br />
EXEC Sp_kitapBul @ISBNNo=’12345’, @kitapAdi=’Yol’</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2010/01/29/sql-stored-prosedur-olusturmak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Betik Dilleriyle Çalışma</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-betik-dilleriyle-calisma/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-betik-dilleriyle-calisma/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:55:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Betik]]></category>
		<category><![CDATA[Dilleri]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=54</guid>
		<description><![CDATA[Betik dilleri, HTML ile Java, C++ ve Visual Basic gibi programlama dilleri arasında bir geçiş aşamasıdır. HTML genellike metin düzenlemek için kullanılır. Programlama dilleri de genellikle bilgisayarlara bir dizi karmaşık talimatlar vermek için kullanılır. Betik dillerinin de bilgisayarlara komutlar vermek için kullanılabilmelerine karşın, sözdizim kuralları genellikle programlama dillerine oranla az katıdır. Betik dilleri metin düzenleme [...]]]></description>
			<content:encoded><![CDATA[<p>Betik dilleri, HTML ile Java, C++ ve Visual Basic gibi programlama dilleri arasında bir geçiş aşamasıdır. HTML genellike metin düzenlemek için kullanılır. Programlama dilleri de genellikle bilgisayarlara bir dizi karmaşık talimatlar vermek için kullanılır. Betik dillerinin de bilgisayarlara komutlar vermek için kullanılabilmelerine karşın, sözdizim kuralları genellikle programlama dillerine oranla az katıdır. Betik dilleri metin düzenleme ya da bir programlama dilinde yazılmış ve derlenmiş bileşenleri çağırma ve kullanma üzerinde yoğunlaşırlar.</p>
<p>ASP, ağ geliştiricilerinin çeşitli betik dilleri kullanarak eksiksiz yordamlar yazabilmelerine olanak verir. Çeşitli betik dilleri bir tek .asp dosyası içinde kullanılabilir. Buna ek olarak, betikler sunucu tarafında okunup işlendiği için istemci tarayıcının betik desteği olmasına da gerek yoktur.</p>
<p>Ağ sunucunuzda uygun betik motoru kurulu olan her betik dilini kullanabilirsiniz. Bir betik motoru belli bir dilde yazılan komutları işleyen bir programdır. ASP iki betik motoru ile birlikte gelir; Microsoft VBScript ve Microsoft JScript. REXX ve Perl gibi diğer betik dillerinin betik motorlarını da yükleyip kullanabilirsinz.</p>
<p>Bir Visual Basic programcısı iseniz, Visual Basic in bir alt kümesi sayılabilecek olan VBScript i kullanmaya hemen başlayabilirsiniz. Java, C ya da C++ programcısı iseniz, JScript sözdizimini kendinize yakın bulacaksınız. Yalnız, JScript Java ya da C ile ilişkili değildir.</p>
<p>ASP bir ActiveX betikleme platformudur. Bir dili kullanmak için ActiveX Betik Standardı na uyan ve ağ sunucunuzda bir COM (Common Object Model / Ortak Nesne Modeli) nesnesi olarak duran bir betik motoru kurmalısınız.</p>
<p>Birincil Betik Dilinin Atanması<br />
ASP birincil betik dili, &lt;% ve %&gt; ayraçları içinde verilen komutları işlemek için kullanılan dildir. Bir ASP uygulamasında sayfa başına bir ya da uygulamadaki tüm sayfalar için bir birincil betik dili atayabilirsiniz.</p>
<p>Bir Sayfa için Dil Atanması<br />
Tek bir sayfanın birincil betik dilini atamak için .asp dosyanızın başına &lt;%@ LANGUAGE %&gt; komutunu ekleyin. Bu komutun sözdizimi:</p>
<p>&lt;%@ LANGUAGE=BetikDili %&gt;<br />
Burada BetikDili tek bir sayfanın birincil betik dilidir. Sayfanın dil seçimi ASP uygulaması için yapılan dil seçiminin umursanmamasını sağlar.</p>
<p>ASP komutlarının kullanılması için verilen talimatları izleyin, daha fazla bilgi için:</p>
<p>NOT: Object.Method (Nesne.Yordam / İşlev) sözdizimini kullanmayan bir dili birincil betik dili olarak kullanmak istiyorsanız öncelikle LanguageEngines kayıt anahtarını yaratmanız gerekmektedir (Bakınız Windows Kayıt Düzenleyicisi: Regedit).</p>
<p>Bir Uygulama için Geçerli Dilin Atanması<br />
Bir uygulamadaki her sayfa için geçerli olan birincil betik dilini atamak için, Internet Hizmet Yöneticisi&#8217;ndeki (Internet Service Manager) App Options (Uygulama Seçenekleri) bölümünde Default ASP Language (Varsayılan ASP Dili) özelliğini ayarlayın.</p>
<p>Sunucuda VBScript ve JScript Kullanımı<br />
Sunucuda ASP ile VBScript kullanırken, VBScript in iki özelliği kullanılamaz. ASP betikleri sunucuda çalıştırıldığı için, InputBox ve MsgBox kullanıcı arayüzü ögeleri desteklenmemektedir. Ayrıca, CreateObject ve GetObject adlı VBScript işlevlerini de sunucu tarafı betiklerinde kullanmayınız. Bunun yerine Server.CreateObject kullanınız, böylece ASP yaratılan nesneyi takip edebilir. CreateObject ve GetObject ile yaratılan nesneler, ASP nin kendi nesnelerine erişemezler ve işlemlerde yer alamazlar. Bir istisna, Admin Objects (Yönetici Nesneleri) kullanıldığı durumdur.</p>
<p>Açıklama Satırlarının Dahil Edilmesi<br />
Bütün ASP betiklerinin işlenmesi sunucu tarafında yapıldığı için, betiklemeyi desteklemeyen tarayıcılardan betiklerin saklanması için HTML açıklama satırı etiketlerinin kullanılmasına gerek yoktur. Bütün ASP komutları, tarayıcıya gönderilmeden önce işlenirler. Bir HTML sayfasına açıklamalar ekleyebilirsiniz. Bu açıklamalar tarayıcıya gönderilir ve kullanıcı kaynak HTML i gömek isterse görülürler.</p>
<p>VBScript Açıklamaları<br />
Kesme işareti kullanarak açıklama satırları yazma VBScript de mümkündür. HTML açıklamalarının aksine, bunlar betik işlenirken ayıklanırlar ve tarayıcıya gönderilmezler.</p>
<p>&lt;%<br />
&#8216;Bu satır ve aşağıdaki satırlar açıklamadır.<br />
&#8216;DiziYaz işlevi bir dizinin tüm<br />
&#8216;elemanlarını listeler.<br />
Call DiziYaz (Dizi())<br />
%&gt;</p>
<p>Bir çıktı deyimine açıklama ekleyemezsiniz. Örneğin aşağıdaki betik komutlarından birincisi çalışır ancak ikincisi çalışmaz çünkü ikincisi &lt;%= ile başlamaktadır:</p>
<p>&lt;% i = i +1 &#8216;i yi 1 arttırır. Bu satır çalışır. %&gt;<br />
&lt;%= name &#8216;değişken değerini yazar. Bu satır çalışmaz%&gt;</p>
<p>JScript Açıklamaları // açıklama simgeleri JScript de desteklenmiştir. Bu simgeler her açıklama satırında kullanılmalıdır.<br />
&lt;% Call TarihYaz %&gt;<br />
&lt;SCRIPT LANGUAGE=JScript RUNAT=Server&gt;<br />
// Bu, TarihYaz işlevi için bir tanımdır<br />
function TarihYaz()<br />
{<br />
var x<br />
x = new Date()<br />
// Bu satır şu andaki tarihi tarayıcıya gönderir,<br />
Response.Write(x.toString())<br />
}<br />
&lt;/SCRIPT&gt;</p>
<p>Büyük-Küçük Harf Ayrımı<br />
VBScript büyük-küçük harf ayrımı yapmaz. ASP nin Request nesnesini kullanmak için Request ya da request yazabilirsiniz. Büyük-küçük ayrımının yapılmamasının bir sonucu değişken isimlerinin bu ayrımla ayırdedilememesidir. Örneğin renk ve Renk adında iki ayrı değişken kullanamazsınız.</p>
<p>JScript büyük-küçük harf ayrımı yapar. Örneğin Date yerine date yazmak bir hata oluşturur. Bu dökümanda bahsedilen ASP nesnelerinin yazılış biçimi, JScript de geçerlidir. (Response gibi.)</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-betik-dilleriyle-calisma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Yordamların Yazılması</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-yordamlarin-yazilmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-yordamlarin-yazilmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:43:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Yordam Yazım]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=49</guid>
		<description><![CDATA[Bir yordam, belli bir işi yapan ve bir değer döndürebilen betik komutları kümesidir. Kendi yordamlarınızı tanımlayabilir ve bunları betiklerinizde tekrar tekrar çağırabilirsiniz. Yordam tanımlarınızı, bu yordamları çağıran .asp dosyasına yerleştirebileceğiniz gibi sıkça kullanılan yordamlarınızı ortak kullanılan bir .asp dosyadına yerleştirip #include deyimiyle diğer .asp dosyalarına dahil edebilirsiniz. Ayrıca, bir ActiveX paketini de bu işlev için [...]]]></description>
			<content:encoded><![CDATA[<p>Bir yordam, belli bir işi yapan ve bir değer döndürebilen betik komutları kümesidir. Kendi yordamlarınızı tanımlayabilir ve bunları betiklerinizde tekrar tekrar çağırabilirsiniz. Yordam tanımlarınızı, bu yordamları çağıran .asp dosyasına yerleştirebileceğiniz gibi sıkça kullanılan yordamlarınızı ortak kullanılan bir .asp dosyadına yerleştirip #include deyimiyle diğer .asp dosyalarına dahil edebilirsiniz. Ayrıca, bir ActiveX paketini de bu işlev için kullanabilirsiniz.</p>
<p>Yordam Tanımlama<br />
Yordam tanımları &lt;SCRIPT&gt; ve &lt;/SCRIPT&gt; etiketleri arasında yer alır ve belirtilen betik dilinin kurallarına uymak zorundadır. &lt;SCRIPT&gt; etiketini, birincil betik dilinden ayrı bir betik dilinde yazılan yordamlar için kullanın. Birincil betik dilinde yazılan yordamlar için ise, &lt;% ve %&gt; betik ayraçlarını kullanın.</p>
<p>HTML in &lt;SCRIPT&gt; etiketini kullanırken, betiğin sunucu tarafında işlenmesi için iki özelliği kullanmalısınız. &lt;SCRIPT&gt; etiketini kullanmanın sözdizimi:</p>
<blockquote><p>&lt;SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT&gt;<br />
yordam tanımı<br />
&lt;/SCRIPT&gt;</p></blockquote>
<p>RUNAT=SERVER özelliği, ağ sunucusuna betiğin sunucuda işlenmesi gerektiğini söyler. Eğer bu özelliği kurmazsanız, betik istemci tarayıcı da işlenir. LANGUAGE özelliği bu betik bloğu için kullanılacak olan betik dilini belirtir. Betik motorunuz olan herhangi bir betik dilini kullanabilirsiniz. VBScript belirtmek için VBSCRIPT, JScript belirtmek içinse JSCRIPT değerini kullanmanız gerekir. Eğer LANGUAGE özelliğini kurmazsanız, betik bloğu birincil betik dilinde yorumlanır.</p>
<p>Betik bloğundaki komutlar seçilen betik dilinde bir ya da daha fazla tam yordam oluşturmalıdır. Örneğin aşağıdaki komutlar JScript dilindeki BirYordam yordamını tanımlamaktadır:</p>
<blockquote><p>&lt;HTML&gt;<br />
&lt;SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT&gt;<br />
function BirYordam()<br />
{<br />
Response.Write(&#8221;BirYordam çağırıldı!&#8221;)<br />
}<br />
&lt;/SCRIPT&gt;</p></blockquote>
<p>Önemli: Sunucu tarafında &lt;SCRIPT&gt; etiketleri arasında tam yordamların parçaları olmayan betik komutları kullanmayın. Bir yordamın bölümü olmayan komutlar, tahmin edilemeyecek sonuçlar doğurabilirler, çünkü çalıştırılma sıraları tahmin edilemez. Ayrıca, ASP çıkış komutunu (&lt;%=) da bir yordam içinde kullanamazsınız. Bunu yerine, Response.Write kullanmalısınız.</p>
<p>Yordam Çağırma<br />
Yordam çağırmak için, yordamın adını bir komutta kullanın. VBScript den JScript yordamları çağırıyorsanız, yordam isminden sonra parantez kullanın; yordamın hiçbir parametresi yoksa boş parantez kullanın. JScript den VBScript ya da JScript yordamları çağırıyorsanız, yordam adından sonra mutlaka parantez kullanın.</p>
<p>VBScript de yordam çağırırken Call anahtar kelimesini de kulanabilirsiniz. Yalnız, çağırdığınız yordamın parametreleri varsa bu parametreler de parantezler dahilinde verilmelidir. Call anahtar kelimesini kullanmazsanız parametreler etrafına parantez koymanıza da gerek yoktur. Call sözdizimi ile herhangi bir standart ya da kullanıcının tanımladığı işlevi çağırmak isterseniz, işlevin döndürdüğü değer atılır.</p>
<p>Aşağıdaki örnekte iki değişik betik dili (VBScript ve JScript) kullanılarak yordam yazılması ve çağırılması örneklenmiştir:</p>
<blockquote><p>&lt;%@ LANGUAGE = VBSCRIPT &gt;%<br />
&lt;HTML&gt;<br />
&lt;BODY&gt;<br />
&lt;% Call Yaz %&gt;<br />
&lt;BR&gt;<br />
&lt;% Call TarihYaz() %&gt;<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</p>
<p>&lt;%<br />
Sub Yaz<br />
Response.Write &#8220;&lt;TABLE&gt;&#8221;<br />
Response.Write &#8220;&lt;TR&gt;&lt;TH&gt;Name&lt;/TH&gt;&lt;TH&gt;Value&lt;/TH&gt;&lt;/TR&gt;&#8221;<br />
Set Params = Request.QueryString<br />
For Each p in Params<br />
Response.Write &#8220;&lt;TR&gt;&lt;TD&gt;&#8221; &amp; p &amp; &#8220;&lt;/TD&gt;&lt;TD&gt;&#8221; &amp; _<br />
Params(p) &amp; &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221;<br />
Next<br />
Response.Write &#8220;&lt;/TABLE&gt;&#8221;<br />
End Sub<br />
%&gt;</p>
<p>&lt;SCRIPT LANGUAGE=JScript RUNAT=Server&gt;<br />
function TarihYaz()<br />
{<br />
var x<br />
x = new Date()<br />
Response.Write(x.toString())<br />
}<br />
&lt;/SCRIPT&gt;</p></blockquote>
<p>Dizilerin Yordamlara Parametre Olarak Gönderilmesi<br />
VBScript de bir dizinin tümünü bir yordama göndermek için, dizi isminden sonra boş parantez kullanın; JScript de ise boş köşeli parantez kullanın.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-yordamlarin-yazilmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Bileşen ve Nesnelerin Kullanılması</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-bilesen-ve-nesnelerin-kullanilmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-bilesen-ve-nesnelerin-kullanilmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:40:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Bileşen]]></category>
		<category><![CDATA[Kullanım]]></category>
		<category><![CDATA[Nesne]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=46</guid>
		<description><![CDATA[ActiveX bileşenleri güçlü ağ uygulamaları yaratmanın anahtarıdır. Bileşenler, betiklerinizde kullanabileceğiniz nesneler sunar. ASP ayrıca betiklerinizde kullanabileceğiniz standart nesneler sunar. Bu bölümde bileşenlerin sağladığı nesneler ve ASP nin standart nesnelerinin kullanılması anlatılmaktadır.
Bileşenler Hakkında
Bir ActiveX bileşeni, belli bir işi ya da belli işleri yapan program kodu içeren bir dosyadır. Bileşenler sık kullanılan işleri yaparlar, böylece bu işleri [...]]]></description>
			<content:encoded><![CDATA[<p>ActiveX bileşenleri güçlü ağ uygulamaları yaratmanın anahtarıdır. Bileşenler, betiklerinizde kullanabileceğiniz nesneler sunar. ASP ayrıca betiklerinizde kullanabileceğiniz standart nesneler sunar. Bu bölümde bileşenlerin sağladığı nesneler ve ASP nin standart nesnelerinin kullanılması anlatılmaktadır.</p>
<p>Bileşenler Hakkında<br />
Bir ActiveX bileşeni, belli bir işi ya da belli işleri yapan program kodu içeren bir dosyadır. Bileşenler sık kullanılan işleri yaparlar, böylece bu işleri yapmak için kendi kodunuzu yazmanıza gerek yoktur. ASP, veri tabanı erişim bileşeni (Database Access Component) gibi hemen kullanabileceğiniz temel bileşenlerle birlikte gelir. Daha sonra başka bazı bileşenleri dışardan edinebilir ya da kendi bileşenlerinizi yazabilirsiniz.</p>
<p>Bileşenleri, betikleriniz ya da ağ uygulamalarınızın temel taşları olarak kullanırsınız. Betik dillerinde yeniyseniz, bileşenleri kullanan betikleri bileşenlerin nasıl çalıştığını bilmeden yazabilirsiniz. Sadece bilmeniz gereken, bileşenlerin sağladığı nesnelere nasıl erişmeniz gerektiğidir. Bileşenler, programlama öğrenmeden iyi betikler yazabilmenizi sağlar.</p>
<p>Ağ uygulaması geliştiricisiyseniz, iş mantığını çevreleyen bileşenler yazabilirsiniz. Örneğin bir ürünün satışında satış vergisini hesaplayan bir bileşen yazabilirsiniz. Daha sonra bu bileşeni belli bir siparişi işleyen bir betikten çağırabilirsiniz. Vergi hesaplanması işini sipariş işinden ayırarak belli bir bölge için vergi düzenlemeleri değiştiğinde yazdığınız bileşeni kolayca günleyebilirsiniz. C, C++, Java ya da Visual Basic gibi COM u (Common Object Model / Ortak Nesne Modeli) destekleyen tüm programlama dillerinde bileşen yazabilirsiniz. COM programlama ile ilişkiniz varsa; ActiveX bileşenleri otomasyon sunucularıdır. Ağ sunucusunda çalışacaklarsa, ActiveX bileşenleriniz MsgBox işlevi gibi görsel ögelere sahip olmamalıdır.</p>
<p>Bileşenler tekrar kullanılabilir. Bir bileşeni ağ sunucunuza kurduğunuz zaman, onu bir ASP betiğinden, bir ISAPI uygulamasından, sunucudaki diğer bir bileşenden ya da başka bir COM-uyumlu programlama dilinde yazılan bir programdan çağırabilirsiniz.</p>
<p>Bir Bileşene Ait Nesnenin Bir Örneğinin Yaratılması<br />
Bir bileşen, bir dinamik kütüphane (.dll) ya da çalıştırılır dosyada (.exe) tutulan çalıştırılır koddur. Bileşen, bir ya da daha fazla nesne ve onun / onların yordamlarını (method) ve özelliklerini içerir. Bir bileşenin sağladığı nesneyi kullanmak için nesnenin bir örneğini oluşturursunuz ve bu yeni örneğe bir değişken ismi atarsınız. ASP nin Server.CreateObject yordamını kullanarak nesne örneği yaratın. Kullandığınız betik dilinin değişken atama sözdizimini kullanarak nesne örneğinize bir isim verin.</p>
<p>Örneğin ASP AdRotator nesnesinin bir örneğinin yaratılması aşağıdaki gibidir:</p>
<p>VBScript ile:</p>
<blockquote><p>&lt;% Set MyAds = Server.CreateObject(&#8221;MSWC.AdRotator&#8221;) %&gt;<br />
JScript ile:</p>
<p>&lt;% var MyAds = Server.CreateObject(&#8221;MSWC.AdRotator&#8221;) %&gt;<br />
HTML &lt;OBJECT&gt; etiketini kullanarak da nesne örnekleri yaratabilirsiniz. RUNAT ve ID özelliklerini belirtmelisiniz. Nesneyi ya onun PROGID si ya da CLSID si ile tanımlayabilirsiniz:</p>
<p>&lt;OBJECT RUNAT=Server ID=MyAd PROGID=&#8221;MSWC.AdRotator&#8221;&gt;&lt;/OBJECT&gt;</p></blockquote>
<p>ya da</p>
<blockquote><p>&lt;OBJECT RUNAT=Server ID=MyAd<br />
CLASSID=&#8221;Clsid:1621F7C0-60AC-11CF-9427-444553540000&#8243;&gt;&lt;/OBJECT&gt;</p></blockquote>
<p>Bir Nesneye Ait Metodların Çağırılması</p>
<p>Metod, bir nesne üzerinde ya da bir nesne ile birlikte uygulayabileceğiniz bir iş / harekettir. Bir metodu çağırmak için kullanılan genel sözdizimi:<br />
Nesne.Metod parametereler<br />
Parametreler metoda göre değişir.<br />
Örneğin Response standart nesnesinin Write metodunu aşağıdaki gibi kullanarak tarayıcıya bilgi gönderebilirsiniz:</p>
<blockquote><p>&lt;% Response.Write &#8220;Merhaba&#8221; %&gt;</p></blockquote>
<p>NOT: Bazı betik dilleri Nesne.Metod sözdizimini desteklemez. Sizin diliniz desteklemiyorsa, Windows kayıtlarına (registry) bir kayıt eklemelisiniz.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-bilesen-ve-nesnelerin-kullanilmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nesne Etkinlik Alanlarının Atanması</title>
		<link>http://www.tunahan.net/2009/12/15/nesne-etkinlik-alanlarinin-atanmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/nesne-etkinlik-alanlarinin-atanmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:31:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Alanları]]></category>
		<category><![CDATA[Atanması]]></category>
		<category><![CDATA[Etkinlik]]></category>
		<category><![CDATA[Nesne]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=40</guid>
		<description><![CDATA[Sayfa Etkinlik Alanı Kullanımı
Server.CreateObject ile yarattığınız bir nesne o sayfa boyunca varolur. Nesne o sayfa üzerindeki bütün betik komutlarınca erişilebilir ve sayfanın işlenmesi bittiğinde bırakılır.
Visual Basic ya da VBScript ile programlama yaptıysanız, ASP sayfayı işlemeyi bitirene kadar bir nesneyi bırakamamanıza dikkat edin. Örneğin aşağıdaki VBScript ifadesi bir nesneyi bırakmak için kullanılır:
Set myObj = Nothing
Bu ifadeyi [...]]]></description>
			<content:encoded><![CDATA[<p>Sayfa Etkinlik Alanı Kullanımı<br />
Server.CreateObject ile yarattığınız bir nesne o sayfa boyunca varolur. Nesne o sayfa üzerindeki bütün betik komutlarınca erişilebilir ve sayfanın işlenmesi bittiğinde bırakılır.</p>
<p>Visual Basic ya da VBScript ile programlama yaptıysanız, ASP sayfayı işlemeyi bitirene kadar bir nesneyi bırakamamanıza dikkat edin. Örneğin aşağıdaki VBScript ifadesi bir nesneyi bırakmak için kullanılır:</p>
<blockquote><p>Set myObj = Nothing</p></blockquote>
<p>Bu ifadeyi bir ASP sayfasında kullanırsanız, myObj yi kullanmaya ilişkin her deneme tahmin edildiği gibi bir hata kodu döndürecektir. Ama aslında ASP siz nesneyi bıraktıktan sonra da o nesneye atanan kaynakları tutar ve sayfanın işlenmesi bitenen kadar da bu sürer.</p>
<p>Nesnelerin sayfa etkinlik alanları olduğu için kodla bırakılabileceklerine güvenmeyin. Örneğin aşağıdaki döngü 1001 tane Connection nesnesi yaratır ve bu da büyük bir SQL sunucu üzerindeki bağlantılardan bile birçoğunu açar:</p>
<blockquote><p>&lt;%<br />
For I = 0 to 1000<br />
Set Conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)<br />
Conn.Open &#8220;connection string&#8221;<br />
Next<br />
%&gt;</p></blockquote>
<p>Bir Nesneye Oturum Etkinlik Alanı Atanması<br />
Oturum etkinlik alanına sahip bir nesne her yeni oturum için yaratılır ve oturum sona erince bırakılır; yani her aktif oturum için bir nesne vardır. Oturum etkinlik alanı, birden çok betik tarafından kullanılan ama tek bir kullnıcı oturumunu etkileyen nesneler için kullanılır.</p>
<p>Bir nesneye oturum etkinlik alanı atamak için nesneyi ASP nin standart Session nesnesinde saklayın. Global.asa dosyasında &lt;OBJECT&gt; etiketini kullanarak ya da bir ASP sayfasında Server.CreateObject metodunu kullanarak oturum etkinlik alanı olan bir nesne yaratabilirsiniz.</p>
<p>Global.asa dosyasında &lt;OBJECT&gt; etiketini RUNAT (Server atanmalıdır) ve SCOPE (Session atanmalıdır) deyimleri ile genişleterek kullanabilirsiniz. Örneğin:</p>
<blockquote><p>&lt;OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID=&#8221;MSWC.Adrotator&#8221;&gt;<br />
&lt;/OBJECT&gt;</p></blockquote>
<p>Nesneyi Session nesnesi içinde sakladıktan sonra nesneye uygulamadaki herhangi bir sayfadan erişebilirsiniz. Aşağıdaki ifade bir önceki örnekte &lt;OBJECT&gt; etiketi ile yaratılan nesneyi kullanmaktadır:</p>
<blockquote><p>&lt;%= MyAd.GetAdvertisement(&#8221;addata.txt&#8221;) %&gt;</p></blockquote>
<p>Bir ASP sayfasında Server.CreateObject metoduyla bir nesneyi Session nesnesinde tutabilirsiniz. Örneğin:</p>
<blockquote><p>&lt;% Set Session(&#8221;MyAd&#8221;) = Server.CreateObject(&#8221;MSWC.Adrotator&#8221;) %&gt;</p></blockquote>
<p>Nesneyi aşağıdaki gibi kullanabilirsiniz:</p>
<blockquote><p>&lt;% Set MyAd = Session(&#8221;MyAd&#8221;) %&gt;<br />
&lt;%= MyAd.GetAdvertisement(&#8221;addata.txt&#8221;) %&gt;</p></blockquote>
<p>Nesnelere Uygulama Etkinlik Alanı Atanması<br />
Uygulama etkinlik alanına sahip bir nesne, uygulama başlayınca yaratılan bir nesnedir. Bu nesne tüm istemcilerce paylaşılır. Çok az durumda bir nesneye uygulama etkinlik alanı vermelisiniz. Sayaçlar gibi bazı nesnelere uygulama etkinlik alanı verilebilir ama genelde takip eden kesimde önerilen alternatifleri kullanmalısınız.</p>
<p>Bir nesneye uygulama etkinlik alanı vermek için nesneyi ASP nin standart Application nesnesinde saklayın. Bunu yapmak için Global.asa dosyasında &lt;OBJECT&gt; etiketi kullanabilir ya da bir ASP sayfasında Server.CreateObject kullanabilirsiniz.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/nesne-etkinlik-alanlarinin-atanmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İçeriğin Tarayıcıya Gönderilmesi</title>
		<link>http://www.tunahan.net/2009/12/15/icerigin-tarayiciya-gonderilmesi/</link>
		<comments>http://www.tunahan.net/2009/12/15/icerigin-tarayiciya-gonderilmesi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:28:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[gönderilmesi]]></category>
		<category><![CDATA[İçeriğin]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[tarayıcıya]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=36</guid>
		<description><![CDATA[Bir ASP betiği işletildiğinde, ASP ayraçlarıyla ya da &#60;SCRIPT&#62; etiketi ile çevrelenmemiş herhangi bir metin ya da grafik de tarayıcıya yönlendirilir. Ayrıca Response nesnesi kullanılarak da içerik tarayıcıya açık bir şekilde gönderilebilir.
İçeriğin Gönderilmesi
ASP ayraçları arasından ya da bir yordamdan gelen içeriği tarayıcıya göndermek için, Response nesnesinin Write metodunu kullanın. Örneğin, aşağıdaki ifade, kullanıcının sayfayı daha [...]]]></description>
			<content:encoded><![CDATA[<p>Bir ASP betiği işletildiğinde, ASP ayraçlarıyla ya da &lt;SCRIPT&gt; etiketi ile çevrelenmemiş herhangi bir metin ya da grafik de tarayıcıya yönlendirilir. Ayrıca Response nesnesi kullanılarak da içerik tarayıcıya açık bir şekilde gönderilebilir.</p>
<p>İçeriğin Gönderilmesi<br />
ASP ayraçları arasından ya da bir yordamdan gelen içeriği tarayıcıya göndermek için, Response nesnesinin Write metodunu kullanın. Örneğin, aşağıdaki ifade, kullanıcının sayfayı daha önce ziyaret etmiş olmasına göre farklı bir karşılama mesajı yollar:</p>
<blockquote><p>&lt;%<br />
If IlkDefa = True Then<br />
Response.Write &#8220;&lt;H3 ALIGN=CENTER&gt;Acilis Sayfasına Hosgeldiniz.&lt;/H3&gt;&#8221;<br />
Else<br />
Response.Write &#8220;&lt;H3 ALIGN=CENTER&gt;Acilis Sayfasına Yeniden Hosgeldiniz.&lt;/H3&gt;&#8221;<br />
End If<br />
%&gt;</p></blockquote>
<p>Yordam dışında iken, içeriğin kullanıcıya geri gönderilmesi için Response.Write kullanmak zorunda değilsiniz. Betik ayraçları arasında olmayan içerikler direkt olarak kullanıcıya geri gönderilir ki içerik buna göre biçimlendirilir ve görüntülenir. Örneğin, aşağıdaki betik bir önceki betikle tamamen aynı çıktıyı üretir:</p>
<blockquote><p>&lt;H3 ALIGN=CENTER&gt;<br />
&lt;% If IlkDefa Then %&gt;<br />
Acilis Sayfasına Hosgeldiniz.<br />
&lt;% Else %&gt;<br />
Acilis Sayfasına Yeniden Hosgeldiniz.<br />
&lt;% End If %&gt;<br />
&lt;/H3&gt;</p></blockquote>
<p>Sadece bir seferlik çıktı almak istiyorsanız ya da varolan bir HTML metinine ifadeler eklemenin daha uygun olduğu durumlarda, birleştirilmiş betik komutları kullanın. Bir ifadeyi ayraçlarla bölmek istemiyorsanız ya da tarayıcıya dönen bir dizgiyi oluşturmak istiyorsanız Response.Write&#8217;ı kullanın. Örneğin, bir HTML formu tarafından yollanmış değerlerle bir tablonun satırını oluşturan metin dizgisini kurabilirsiniz:</p>
<blockquote><p>Response.Write &#8220;&lt;TR&gt;&lt;TD&gt;&#8221; &amp; Request.Form(&#8221;Adı&#8221;) _<br />
&amp; &#8220;&lt;/TD&gt;&lt;TD&gt;&#8221; &amp; Request.Form(&#8221;Soyadı&#8221;) &amp; &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221;</p></blockquote>
<p>Request.Form bir HTML formu tarafından yollanan değerleri döndürür. Ampersand karakteri (&amp;), VBScript için dizgi devam ettirme karakteridir.</p>
<p>İçerik Türünü Ayarlamak<br />
Web sunucu, tarayıcıya bir dosya döndürdüğü zaman, dosyanın içeriğinin ne tür olduğunu tarayıcıya belirtir. Bu, tarayıcının dosyayı kendi kendine mi yoksa başka bir uygulamayı çağırarak mı görüntüleyeceğine karar vermesini sağlar. Örneğin, eğer Web sunucu bir Microsoft Excel tablosu döndürüyorsa, tarayıcının sayfayı görüntülemek için bir Microsoft Excel kopyası çalıştırabilmesi gerekir. Web sunucu, dosya türlerini, dosya ismi uzantılarını bir MIME türleri listesiyle karşılaştırmak suretiyle anlar.</p>
<p>Response nesnesinin ContentType özelliğini, kullanıcıya yolladığınız içeriğin HTTP içerik türü dizgisini ayarlamak için kullanabilirsiniz. Örneğin, aşağıdaki komut grubu kanal tanımlamaları için içerik türünü ayarlar:</p>
<blockquote><p>&lt;% Response.ContentType = &#8220;application/x-cdf&#8221; %&gt;</p></blockquote>
<p>Diğer yaygın içerik türleri: text/plain ( yorumlanmış HTML ifadeleri yerine metin olarak döndürülen içerikler için ), text/gif ( GIF imgeleri için ), ve video/quicktime ( Apple QuickTime® formatındaki filmeler için ). Bir grup standart MIME türleri tanımlanmıştır; ayrıca bir Web sunucu ya da Web tarayıcı birtakım MIME türlerini destekleyebilir. Microsoft Web sunucunuzun desteklediği içerik türlerini öğrenmek için, önce Web sitenizin özellikler penceresini açın (bunun için Internet Service Manager&#8217;i kullanın), HTTP Headers&#8217;a tıklayın ve sonra File Types&#8217;a tıklayın.</p>
<p>Tarayıcıyı Yeniden Yönlendirmek<br />
İçeriği kullanıcıya yollamak yerine, tarayıcıyı Redirect metodunu kullanarak başka bir URL&#8217;ye yönlendirebilirsiniz. Örneğin, kullanıcıların uygulamanıza müşteri numarası aldıkları bir kişisel web sayfasından girdiğine emin olmak istiyorsanız, müşteri numaraları olup olmadığını kontrol edebilirsiniz. Numaraları yoksa, onları kişisel web sayfasına yönlendirebilirsiniz.</p>
<blockquote><p>&lt;%<br />
If Session(&#8221;MusteriNo&#8221;) = 0 Then<br />
Response.Redirect &#8220;homepage.asp&#8221;<br />
End If<br />
%&gt;</p></blockquote>
<p>Tamponlamanız çalışmıyorsa tarayıcıyı, herhangi bir içerik ya da başlık, tarayıcıya dönmeden yönlendirmelisiniz. Response.Redirect ifadesini, &lt;HTML&gt; etiketlerinden önce, sayfanın en üstüne yerleştirin. Böylece tarayıcıya hiçbirşey dönmediğinden emin olursunuz.</p>
<p>Eğer Response.Redirect&#8217;i içerik ya da başlıklar tarayıcıya döndükten sonra kullanırsanız, bir hata mesajı alırsınız.</p>
<p>Eğer Response.Redirect&#8217;i sayfanın ortasında kullanmak istiyorsanız, bunu Response.Buffer özelliği ile birlikte kullanın.</p>
<p>İçerik Tamponlama<br />
Varsayılmış olarak, Web sunucu, HTML ve işletilen betik sonuçlarını ASP sayfası işletiliyormuş gibi döndürürür. Bununla birlikte, Response nesnesinin Buffer özelliğini, bir sayfadaki tüm sunucu betik komutları herhangi bir içerik kullanıcıya yollanmadan önce işletilecek şekilde ayarlayabilirsiniz.</p>
<p>Tamponlamayı, bir önceki içeriği kullanıcıya yollamak istemediğiniz bir sayfayı işletirken kullanabilirsiniz. Bunun yerine, Response nesnesinin Redirect metoduyla kullanıcıyı başka bir sayfaya yönlendirebilir ya da, tamponu Response nesnesinin Clear metoduyla temizleyip kullanıcıya farklı bir içerik yollayabilirsiniz. Aşağıdaki örnek her iki metodu da kullanmaktadır.</p>
<blockquote><p>&lt;%<br />
&#8216; Tamponlamayı çalıştır. Bu ifade &lt;HTML&gt; etiketinden önce yer almalıdır.<br />
Response.Buffer = True %&gt;<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
.<br />
.<br />
.<br />
&lt;%<br />
If Request(&#8221;FName&#8221;) = &#8220;&#8221; Then<br />
Response.Clear<br />
Response.Redirect &#8220;/samples/test.html&#8221;<br />
Else<br />
Response.Write Request(&#8221;FName&#8221;)<br />
End If<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p>Ayrıca Response.Buffer, Web sunucunun, HTTP başlığını, bir betik değiştirmeden önce döndürmesini önler. Bazı özellik ve metodlar, Response.Expires ve Response.Redirect gibi, HTTP başlığını değiştirebilir.</p>
<p>Bir betikte Buffer özelliğini kurduğunuz ve aynı betik içinde Flush metodunu çağırmadığınız zaman, sunucu-istemcinin &#8220;Keep-Alive&#8221; istemlerini korur. Betikleri bu şekilde yazmanın faydası, sunucu performansını arttırmasıdır. Çünkü sunucu her istemci istemi için yeni bir bağlantı kurmak zorunda değildir ( sunucu, istemci ve herhangi bir proxy sunucunun &#8220;Keep-Alive&#8221; istemlerini desteklediği farzediliyor ). Fakat, bu yaklaşımın potansiyel bir sakıncası da şudur; tamponlama herhangi bir istemin, o anki .asp dosyası için olan tüm betik işletimlerinin sunucu tarafından bitirilmesine kadar kullanıcıya görüntülenmesini önler. Uzun veya karışık betikler için, kullanıcının sayfayı görmeden önce belli bir süre beklemesini gerektirebilir. Tamponlama, ASP uygulamaları için varsayılmış olarak kapalıdır. Tüm bir ASP uygulaması için tamponlamayı açmak için Internet Service Manager&#8217;ı kullanabilirsiniz.</p>
<p>Proxy Sunucularında Tampon Sayfalarına İzin Vermek<br />
Uygulamanız, sayfaları, istemciye bir proxy sunucu üzerinden gönderiyor olabilir. Bir proxy sunucu tarayıcılar adına Web sitelerinden sayfa istemek için çalışır. Proxy sunucu HTML sayfalarını, aynı sayfalar için tekrarlanan istemleri tarayıcıya daha hızlı ve verimli bir şekilde döndürülecek şekilde tamponlar. Proxy sunucu işlem istemleri ve cep sayfalar, ağdaki ve Web sunucu üzerindeki yüklenmeyi azaltır.</p>
<p>HTML sayfalarında yapılan çalışmalar doğru olarak tamponlandığı halde bunlar genelde dinamik olarak oluşturulmuş bilgiler içeren ASP sayfaları için doğru çalışmaz. Örneğin, market stok fiyatlarını raporlayan bir sayfa için zaman uyumlu yapılan bilgilerin sağlanması gerekir. Sadece bir saat geç bir bilgi bile yeterince doğru olmayabilir. Eğer uygulamanız kişisel bilgiler döndürüyorsa, herhangi bir kullanıcının başka bir kullanıcının bilgilerini görmediğinden emin olmalıdır.</p>
<p>Varsayılmış olarak, ASP proxy sunucularının ASP sayfasını kendi kendine tamponlamaması sağlanır ( oysa, imgeler, imge eşlemleri, appletler, ve sayfada belirtilen diğer maddeler tamponlanır. ). Cache-Control HTTP başlık alanını kurmak için Response.CacheControl özelliğini kullanarak bazı sayfalar için tamponlamaya izin verebilirsiniz. Response.CacheControl&#8217;in varsayımsal değeri &#8220;Private&#8221; dizgisidir ki bu proxy sunucuların sayfaları tamponlamasını engeller. Tamponlamaya izin vermek için, Cache-Control başlık alanını Public olarak kurun:</p>
<blockquote><p>&lt;% Response.CacheControl = &#8220;Public&#8221; %&gt;</p></blockquote>
<p>Henüz sayfa içeriği yollanmadan önce HTTP başlıklarının tarayıcıya ya da proxy&#8217;e yollanması gerektiği için, ya Response.CacheControl özelliğini herhengi bir HTML etiketinden önce koyun ya da sayfayı tamponlamak için Response.Buffer&#8217;i kullanın.</p>
<p>Cache-Control başlık alanı, HTTP 1.1 maddelerinin bir parçasıdır. Sadece HTTP 1.0 &#8216;ı destekleyen proxylerde ASP sayfaları tamponlanamaz. Çünkü Expires başlık alanı gönderilmez.</p>
<p>Tarayıcılarda Tampon Sayfalarını Önlemek<br />
Her tarayıcı versiyonunun sayfaları tamponlanıp tamponlanmayacağını belirlemek için kendi kuralları vardır. Tarayıcının ASP sayfalarını tamponlamasını engellemek için Expires başlığını kuran Response.Expires&#8217;i kullanın:</p>
<blockquote><p>&lt;% Response.Expires = 0 %&gt;</p></blockquote>
<p>0 değeri tamponlanmış sayfaların hemen sona erdirilmesine zorlar. Çünkü HTTP başlıkları tarayıcıya sayfa içeriğinden önce gönderilmelidir. Aksi takdirde, Response.Expires özelliğini herhangi bir HTML etiketinden önce koyun ya da sayfayı tamponlamak için Response.Buffer özelliğini kullanın.</p>
<p>Dinamik Kanallar Yaratmak<br />
Internet Explorer 4.0, Web tasarımcılarının Web sayfalarını ortak bir temaya göre gruplandırmasını sağlayan kanal özelliğini tanımlar. Tarayıcıda kanallar, bir kanal çubuğunda yeralır; kullanıcılar bir kanala, ikonuna tıklayarak erişirler. Kanallar arka planda otomatik olarak günlenir; kullanıcılar tarayıcılarına indirilmiş son sayfaları almak için sitenizi tekrar ziyaret etmek zorunda kalmazlar. Kanallar, kullanıcıların otomatik günlenmiş ilgili Web sayfalarını hızlı ve sezgisel bir şekilde görmelerini sağlar.</p>
<p>ASP kullanarak, kullanıcı tercihlerini biraraya getirmek için betikler yazabilir ve dinamik olarak kanallar yaratabilirsiniz. Bir kanal tanım dosyası (.cdf), kanal içeriklerinin organizasyon ve programını saptar. .cdf dosyası içindeki komutlar, HTML etiketlerine benzer bir sözdizimi kullanırlar, böylece betikten öğrenilmesi ve üretilmesi kolaylaşır. Bir kanal tanımı dosyası yaratmak için bir ASP betiği yazarken, betiğe bir .cdx uzantısı verin. ASP, bir dosyayı .cdx uzantısı ile okursa, otomatik olarak application/x-cdf içerik türünü yollar ki bu tarayıcıya baytları kanal tanımları olarak yorumlamasını söyler. Eğer .cdx uzantısını kullanmak istemiyorsanız, betiğiniz içerik türünü manual olarak application/x-cdf &#8216;e kurmalıdır. Bunu da Response.ContentType kullanarak yapar.</p>
<p>Aşağıda kanal kullanımının nasıl olacağını gösteren bir örnek yer alıyor. HTML formu, kullanıcıdan kanal seçmesini istiyor. Onaylanınca, form kanal tanımlarını oluşturmak için bir .cdx dosyası içinde bir betik çağırıyor.</p>
<p>İstediğiniz kanalları seçin.</p>
<blockquote><p>&lt;FORM METHOD=&#8221;POST&#8221; ACTION=&#8221;chan.cdx&#8221;&gt;<br />
&lt;P&gt;&lt;INPUT TYPE=CHECKBOX NAME=Movies&gt; Movies<br />
&lt;P&gt;&lt;INPUT TYPE=CHECKBOX NAME=Sports&gt; Sports<br />
&lt;P&gt;&lt;INPUT TYPE=&#8221;SUBMIT&#8221; VALUE=&#8221;SUBMIT&#8221;&gt;<br />
&lt;/FORM&gt;</p></blockquote>
<p>Chan.cdx içindeki betik, istemle onaylanmış form değerlerine dayanan kanal tanımlamaları oluşturur.</p>
<blockquote><p>&lt;% If Request.Form(&#8221;Filmler&#8221;) &lt;&gt; &#8220;&#8221; Then %&gt;<br />
&lt;CHANNEL&gt;<br />
film sayfaları için kanal tanımlama ifadeleri.<br />
&lt;/CHANNEL&gt;<br />
&lt;% End If %&gt;</p>
<p>&lt;% If Request.Form(&#8221;Spor&#8221;) &lt;&gt; &#8220;&#8221; Then %&gt;<br />
&lt;CHANNEL&gt;<br />
spor sayfaları için kanal tanımlama ifadeleri.<br />
&lt;/CHANNEL&gt;<br />
&lt;% End If %&gt;</p></blockquote>
<p>Kanallar ve kanal tanımlama dosyaları hakkında bilgi için, microsoft.com (http://www.microsoft.com/ie) üzerindeki Internet Explorer sayfalarına bakınız.</p>
<p>Sunucuya Dosya Yollamak<br />
Bir tarayıcı, Web sunucuya dosya yollamak için Posting Acceptor uygulamasını kullanabilir. Posting Acceptor yükleme dosyaları kullanılacağı zaman, her alınan dosyanın isim ve yerini listeleyen URL-kodlanmış form alanlarını yollar.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/icerigin-tarayiciya-gonderilmesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
