<?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>CETURK &#187; .NET</title>
	<atom:link href="http://www.ceturk.com/etiket/net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ceturk.com</link>
	<description>Türkiye&#039;nin Bilişim Platformu</description>
	<lastBuildDate>Wed, 08 Sep 2010 08:53:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Nant ile Build İşlemi</title>
		<link>http://www.ceturk.com/programlama/nant-ile-build-islemi.html</link>
		<comments>http://www.ceturk.com/programlama/nant-ile-build-islemi.html#comments</comments>
		<pubDate>Fri, 21 Aug 2009 11:21:48 +0000</pubDate>
		<dc:creator>aydinunlu</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ant]]></category>
		<category><![CDATA[Araçlar]]></category>
		<category><![CDATA[Build Tool]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Nant]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=2310</guid>
		<description><![CDATA[Bu yazımda Extreme Programming anlayışına uygun proje geliştirme sürecinde kullanabileceğimiz araçlardan biri olan NAnt' ı inceleyeceğiz.]]></description>
			<content:encoded><![CDATA[<p>Merhaba arkadaşlar,</p>
<p>Bu yazımda <strong>Extreme Programming</strong> anlayışına uygun proje geliştirme sürecinde kullanabileceğimiz araçlardan biri olan <strong>NAnt</strong>&#8216; ı inceleyeceğiz. <strong>XP </strong>üzerine detaylı bilgileri aşağıdaki linklerden bulabilirsiniz&#8230;<br />
<a href="http://www.extremeprogramming.org" target="_blank">http://www.extremeprogramming.org</a><br />
<a href="http://en.wikipedia.org/wiki/Extreme_programming" target="_blank">http://en.wikipedia.org/wiki/Extreme_programming</a><br />
<a href="http://www.xprogramming.com/xpmag/whatisxp.htm" target="_blank">http://www.xprogramming.com/xpmag/whatisxp.htm</a></p>
<p>Bu kısa açıklamadan sonra biz konumuz olan NAnt&#8217; a geri dönelim isterseniz. NAnt aslında <strong>Java </strong>platformu için geliştirilmiş olan <strong>Ant </strong>isimli aracın, <strong>.net</strong> platformu için geliştirilmiş halidir. NAnt, projelerimizin <strong>build </strong>edilmesi için kullanabileceğimiz bir araçtır. NAnt projeyi <strong>nasıl </strong>derleyeceğini ve hangi elemanları derleme işlemine tabi tutacağını xml formatındaki bir dosya sayesinde öğrenir. Bu xml dosyasının nasıl oluştuğunu birazdan detaylı bir şekilde göreceğiz ama önce NAnt&#8217; ı bilgisayarımıza nasıl kuracağımıza bir bakalım isterseniz&#8230;</p>
<p>Öncelikle<a href="http://nant.sourceforge.net " target="_blank"> http://nant.sourceforge.net </a>adresinden NAnt&#8217; ın son kararlı halini download ediyoruz. Bu yazıyı yazarken ki son versiyonu <strong>0.86 Beta 1 Release</strong> idi fakat ben yazıma <a href="http://sourceforge.net/project/showfiles.php?group_id=31650&amp;package_id=23704&amp;release_id=455595" target="_blank">buradaki </a><strong>0.85 </strong>versiyonu ile devam edeceğim. NAnt&#8217; ı download ettikten sonra dilerseniz<strong> C:\</strong> dizini içine dosyaları açabilirsiniz.</p>
<p>NAnt&#8217; ın herhangi bir kullanıcı arayüzü olmadığı gibi rahat kullanabilmek içinde ufak bir path ayarlaması yapmak gerekiyor. Dosyaları C:\ dizinine çıkardığınızı varsayarak önce;<br />
Bilgisayarıma sağ tıklayıp özellikler diyoruz.<br />
Ardından açılan pencerede <strong>Gelişmiş </strong>sekmesine geliyoruz ve ortam değişkenleri isimli butona tıklıyoruz.</p>
<p><img class="aligncenter size-full wp-image-2312" title="img1" src="http://www.ceturk.com/images/img1.png" alt="img1" width="420" height="485" /></p>
<p>Ardından karşımıza çıkan Ortam Değişkenleri başlıklı pencereden Sistem Değişkenleri bölümünden <strong>Path </strong>isimli değişken için düzenleme işlemi yapıyoruz.</p>
<p><img class="aligncenter size-full wp-image-2313" title="img2" src="http://www.ceturk.com/images/img2.png" alt="img2" width="384" height="431" /></p>
<p>Düzenle dediğimiz zaman karşımıza çıkacak küçük pencerede; <strong>Değişken değeri </strong>başlıklı yerin en sonuna giderek eğer noktalı virgül yoksa bir noktalı virgül koyarak NAnt&#8217; ın .exe dosyasının bulunduğu adresi yazıyoruz. (Buraya aynı zamanda .net &#8216;in csc isimli derleyicisininde path bilgisini yine araya noktalı virgül koyarak eklemenizi tavsiye ederim) (Bende windows D: &#8216;ye kurulu oldugu için siz kendi dizin ayarlarınıza göre bir path düzenlemesi yapın)</p>
<p><strong>NAnt için :</strong> C:\nant-0.85\bin<br />
<strong>CSC için :</strong> C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727</p>
<p><img class="aligncenter size-full wp-image-2314" title="img3" src="http://www.ceturk.com/images/img3.png" alt="img3" width="347" height="148" /></p>
<p>Evet bu düzenlemeleri yaptıktan sonra artık aracımız komut satırından kullanılmaya hazır bir hale gelmiştir. Hemen ufak bir test yapalım ve bakalım buraya kadar yaptıklarımız doğrumu. Test için komut satırını açıp<strong> nant -help</strong> yazmanız yeterlidir. Eğer aracımızın help desteği karşımıza çıktıysa şimdilik sorun yok&#8230;</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2315" title="img4" src="http://www.ceturk.com/images/img4.png" alt="img4" width="534" height="415" /></p>
<p>Hazırlık ve kurulum aşamalarını tamamladığımıza göre artık NAnt&#8217; ı gerçek anlamda kullanabilmek için hemen bir Visual Studio&#8217; da bir ConsoleApplication açalım ve projemizin adına da <strong>NantTest</strong> diyelim. <strong>Program.cs</strong> dosyamızda Main methodu içinde test amaçlı olması için ekrana sadece bir yazı yazdırmamız yeterlidir.;<br />
<strong>Console.WriteLine(&#8220;NAnt test projesi calisti&#8230;&#8221;);</strong></p>
<p>Bu arada el alışkanlığından dolayı falan sakın projeyi derlemeyelim =) Bunu yaparsak bile oluşan exe&#8217; lerimizi hemen silelim. Çünkü zaten amacımız bu işlemi NAnt yardımıyla yapmak.</p>
<p>Az önce yukarda NAnt&#8217; ın projeyi nasıl derleyeceğina dair bilgileri bir xml dosyasından okuduğunu söylemiştik. Şimdi projemize <strong>default.build</strong> adında bir xml dosyası ekleyelim. Bu dosya her nekadar xml formatında olsada uzantısı <strong>build </strong>olmalıdır.O yüzden sonuna .xml yazmayalım.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2316" title="img5" src="http://www.ceturk.com/images/img5.png" alt="img5" width="544" height="335" /></p>
<p>Ardından <a href="http://nant.sourceforge.net/release/0.85/help/fundamentals/buildfiles.html" target="_blank">buradaki </a>kodları kendi projemize uygun olacak şekilde aşağıdaki gibi değiştiriyoruz.</p>
<p><img class="aligncenter size-full wp-image-2317" title="img6" src="http://www.ceturk.com/images/img6.png" alt="img6" width="567" height="361" /></p>
<p>Şimdi bu xml kodlarına kısaca bir bakalım isterseniz.<br />
Öncelikle dosyamız <strong>project </strong>isimli bir root node ile başlıyor. Ve bu elemanda projemizin adını belirtmek zorundayız.</p>
<p><img class="aligncenter size-full wp-image-2318" title="img7" src="http://www.ceturk.com/images/img7.png" alt="img7" width="567" height="22" /></p>
<p>Hemen ardından <strong>property </strong>isimli bir eleman geliyor. Bu eleman sayesinde, xml dosyası içinde kullanabileceğiniz bir nevi değişken tenımlıyoruz aslında. Adına debug demişiz, değerine true vermişiz ve overrite edilemeyeceğini söylemişiz.<br />
Property ile tanımladığımız ve deger verdiğimiz değişkeni xml dosyası içinde kullanacağımız zaman ise şöyle bir syntax kullanıyoruz;<br />
<strong>${name}</strong></p>
<p><img class="aligncenter size-full wp-image-2319" title="img8" src="http://www.ceturk.com/images/img8.png" alt="img8" width="567" height="31" /></p>
<p>Bu satırdan sonra gelen <strong>target </strong>düğümü ise işte bizim için en önemli noktalardan biri. İşte biz NAnt&#8217; a ne yapması gerektiğini bu target &#8216;ların içinde belirtiyoruz. Örneğimizde ise oluşturduğumuz ilk target&#8217; in adına <strong>clean </strong>demişiz. Bu target&#8217; in alt düğümlerine bakarsak bu hedef dahilinde ne yapılması gerektiğine karar verdiğimiz kodları görebiliriz. Burada ise <strong>delete </strong>düğümü ile hangi dosyaların silineceğini belirtiyoruz.</p>
<p><img class="aligncenter size-full wp-image-2320" title="img9" src="http://www.ceturk.com/images/img9.png" alt="img9" width="567" height="72" /></p>
<p>Hemen ardından da yeni bir hedef tanımlamışız ve adına <strong>build </strong>demişiz. Bu hedefin alt düğümlerine bakarsak, .net &#8216;in csc derleyicisini kullanarak <strong>NAntTest.exe</strong> &#8216;adında bir <strong>exe </strong>dosyasının oluşturulacağını söylemişiz. Ve bunu oluşturacak olan <strong>source </strong>&#8216;leride <strong>includes </strong>düğümü ile belirtmişiz.</p>
<p><img class="aligncenter size-full wp-image-2321" title="img10" src="http://www.ceturk.com/images/img10.png" alt="img10" width="566" height="122" /></p>
<p>XML dosyamızı oluşturduktan sonra projemiz artık NAnt sayesinde build edilmeye hazır bir hale gelmiştir.</p>
<p>Şimdi komut satırını açıp xml dosyamızın bulundugu dizin&#8217;e geliyoruz. Bu işlemi komut satırında yapmak yerine <a href="http://rapidshare.com/files/201538685/CmdHerePowertoySetup.rar.html" target="_blank">CmdHere </a>isimli küçük uygulamayı kurabilirsiniz. Bu sayede bir klasöre sağ tıklayıp <strong>Open Command Window Here </strong>demeniz yeterlidir. Bu sayede komut satırını acıp tek tek cd komutu ile çalışılacak dizine gelmek zorunda kalmazsınız.</p>
<p style="text-align: center;"><img class="size-medium wp-image-2322 aligncenter" title="img11" src="http://www.ceturk.com/images/img11-600x193.png" alt="img11" width="600" height="193" /></p>
<p>Ardından açılacak komut satırında <strong>nant </strong>yazmanız yeterlidir. Eğer herhangi bir hata yok ise aşağıdakine benzer bir ekran ile karşılaşırsınız.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2324" title="img12" src="http://www.ceturk.com/images/img12.png" alt="img12" width="600" height="381" /></p>
<p>Burada sadece nant yazdıgımız zaman direk olarak<strong> default.build</strong> isimli xml dosyasına göre bir build işlemi yapılır.Bu şu demektir biz herhangi bir build dosyasını parametre olarak vermezsek NAnt standart olarak <strong>default.build</strong> adındaki dosyaya göre işlem yapılacagını anlar.</p>
<p>Bu işlemden sonra NantTest isimli klasörü açarsanız eğer burada; <strong>NAntTest.exe </strong>ve <strong>NAntTest.pdb </strong>adında 2 tane dosya yaratıldığını görebilirsiniz.</p>
<p><img class="aligncenter size-full wp-image-2325" title="img13" src="http://www.ceturk.com/images/img13.png" alt="img13" width="92" height="139" /></p>
<p>Bu build işleminden sonra komut satırına NAntTest yazarsak uygulamamızın çalıştığını görebilirsiniz.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2326" title="img14" src="http://www.ceturk.com/images/img14.png" alt="img14" width="603" height="51" /></p>
<p>Şimdi komut satırına nant clean yazarsak bu dosyaların silindiğini görebilirsiniz. Buradan da şunu anlıyoruzki nant yazdıktan sonra target adını yazar isek sadece o target&#8217; e göre bir build işlemi yapmış oluruz. Bu da kullanım şekillerinden bir diğeridir.</p>
<p>Evet arkadaşlar bu makalemde build işlemlerinde kullanabileceğimiz bir araç olan NAnt&#8217; a bir giriş yaptık. NAnt aslında çok farklı detayları olan bir tool olduğu için mutlaka resmi web sitesinde yayınlanan dökümanları okumanızı öneririm.<br />
<a href="http://nant.sourceforge.net/release/0.85/help/fundamentals/" target="_blank">http://nant.sourceforge.net/release/0.85/help/fundamentals/</a></p>
<p><a href="http://rapidshare.com/files/201544852/NantTest.rar.html" target="_blank">Örnek Uygulama</a></p>
<p>Mehmet Aydın Ünlü<br />
aydinunlu85@gmail.com<br />
<a href="http://aydinunlu.blogspot.com" target="_blank">http://aydinunlu.blogspot.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/programlama/nant-ile-build-islemi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ritma Teknoloji : .NET Uzman Programcı</title>
		<link>http://www.ceturk.com/kariyer-ilanlari/ritma-teknoloji-net-uzman-programci.html</link>
		<comments>http://www.ceturk.com/kariyer-ilanlari/ritma-teknoloji-net-uzman-programci.html#comments</comments>
		<pubDate>Sat, 27 Jun 2009 09:48:40 +0000</pubDate>
		<dc:creator>Yönetici</dc:creator>
				<category><![CDATA[Kariyer İlanları]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#'ta  Generıc Sınıflar]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobil Uygulamalar]]></category>
		<category><![CDATA[Nesneya Dayalı Programlama]]></category>
		<category><![CDATA[Programcı]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Yazılım Mimarisi]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1719</guid>
		<description><![CDATA[Uzman Programcı (.NET) 
Ritma Teknoloji olarak aşağıdaki özelliklere sahip Uzman bir Programcı aramaktayız.
Teknik Yeterlilikler: 

.NET ve Asp.NET konusunda derin kavrayış


C# ve SQL Server’a hakimiyet


Javascript, Xml, Css


Nesneya Dayalı Programlama

Tecrübe:

Min. 2 adet Web tabanlı Proje Geliştirme Tecrübesi


2 Yıl programcılık tecrübesi

Genel Nitelikler:

Kod yazmayı Sevmek


İyi İletişim

Tercih nedeni sayılabilecek Ek Nitelikler:

Daha fazla Tecrübe


Yazılım Mimarisi ve Framework’ler


Test, Java, Uml


Mobil uygulamalar


Sharepoint


Sigara kullanmamak

İlgilenenlerin;
gerçekleştirdikleri [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold;">Uzman Programcı (.NET) </span></p>
<p><span style="font-weight: bold;">Ritma Teknoloji</span> olarak aşağıdaki özelliklere sahip Uzman bir Programcı aramaktayız.</p>
<p><span style="font-weight: bold;">Teknik Yeterlilikler: </span></p>
<ul>
<li>.NET ve Asp.NET konusunda derin kavrayış</li>
</ul>
<ul>
<li>C# ve SQL Server’a hakimiyet</li>
</ul>
<ul>
<li>Javascript, Xml, Css</li>
</ul>
<ul>
<li>Nesneya Dayalı Programlama</li>
</ul>
<p><span style="font-weight: bold;">Tecrübe:</span></p>
<ul>
<li>Min. 2 adet Web tabanlı Proje Geliştirme Tecrübesi</li>
</ul>
<ul>
<li>2 Yıl programcılık tecrübesi</li>
</ul>
<p><span style="font-weight: bold;">Genel Nitelikler:</span></p>
<ul>
<li>Kod yazmayı Sevmek</li>
</ul>
<ul>
<li>İyi İletişim</li>
</ul>
<p><span style="font-weight: bold;">Tercih nedeni sayılabilecek Ek Nitelikler:</span></p>
<ul>
<li>Daha fazla Tecrübe</li>
</ul>
<ul>
<li>Yazılım Mimarisi ve Framework’ler</li>
</ul>
<ul>
<li>Test, Java, Uml</li>
</ul>
<ul>
<li>Mobil uygulamalar</li>
</ul>
<ul>
<li>Sharepoint</li>
</ul>
<ul>
<li>Sigara kullanmamak</li>
</ul>
<p><span style="font-weight: bold;">İlgilenenlerin;</span></p>
<p>gerçekleştirdikleri projeler ile bu projelerdeki görevleri hakkında açık bilgi ve<br />
cv’lerini <span style="font-weight: bold;">cv@ritmateknoloji.com</span> adresine mail atmalarını rica ederiz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/kariyer-ilanlari/ritma-teknoloji-net-uzman-programci.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>i-con : .Net Developer ( İstanbul)</title>
		<link>http://www.ceturk.com/kariyer-ilanlari/i-con-net-developer-istanbul.html</link>
		<comments>http://www.ceturk.com/kariyer-ilanlari/i-con-net-developer-istanbul.html#comments</comments>
		<pubDate>Sat, 27 Jun 2009 09:42:43 +0000</pubDate>
		<dc:creator>Yönetici</dc:creator>
				<category><![CDATA[Kariyer İlanları]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.net developer]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[i-con]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1713</guid>
		<description><![CDATA[i-con .net developer aramaktadır.
cv&#8217;inizi info@i-con.com.tr adresine REF: GLO-Dev2 konusu ile yolllayabilirsiniz.
Aranan Nitelikler
1. Tercihen bilgisayar müh., 4 yıllık ilgili fakülte mezunu
2. 1-3 yıl arası iş tecrübesi
3. C# ve asp.net’te uzman
4. Tercihen javascript/silverlight/ajax bilen
5. Anadolu yakasında ikamet eden
6. T-sql/pl-sql bilgisine sahip, tercihen oracle ile geliştirme yapmış
 i-con technologies information consulting Hakkında :
Microsoft Certified Partner olan i-con, Eylül [...]]]></description>
			<content:encoded><![CDATA[<p>i-con .net developer aramaktadır.</p>
<p>cv&#8217;inizi<span style="font-weight: bold;"> info@i-con.com.tr</span> adresine <span style="font-weight: bold;">REF: GLO-Dev2</span> konusu ile yolllayabilirsiniz.<br />
<br style="font-weight: bold;" /><span style="font-weight: bold;">Aranan Nitelikler</span></p>
<p>1. Tercihen bilgisayar müh., 4 yıllık ilgili fakülte mezunu<br />
2. 1-3 yıl arası iş tecrübesi<br />
3. C# ve asp.net’te uzman<br />
4. Tercihen javascript/silverlight/ajax bilen<br />
5. Anadolu yakasında ikamet eden<br />
6. T-sql/pl-sql bilgisine sahip, tercihen oracle ile geliştirme yapmış</p>
<p><span style="font-weight: bold;"> i-con technologies information consulting </span>Hakkında :</p>
<p>Microsoft Certified Partner olan i-con, Eylül 2002&#8242;de üstün kalitede yazılım eğitim ve danışmanlık hizmetleri vermek üzere kurulmuştur. Vizyonu, en yeni teknolojilerin kullanımını kolaylaştırmak ve yaygınlaştırmak üzere, Avrasya&#8217;nın bir numaralı bilgi kaynağı olmaktır. Bu çerçevede i-con, yazılım eğitimi ve proje danışmanlığı hizmetleri sunmaktadır. i-con, tüm Microsoft işletim sistemleri, yönetim araçları, sunucu ve yazılım araçları için uygulamaya kadar tüm teknoloji ihtiyaçlarına uygun danışmanlık ve eğitim çözümünü üretir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/kariyer-ilanlari/i-con-net-developer-istanbul.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Anaçatısında ADO+ ve C# -Bölüm 2</title>
		<link>http://www.ceturk.com/web-teknolojileri/net-anacatisinda-ado-ve-c-bolum-2.html</link>
		<comments>http://www.ceturk.com/web-teknolojileri/net-anacatisinda-ado-ve-c-bolum-2.html#comments</comments>
		<pubDate>Fri, 23 May 2003 11:44:48 +0000</pubDate>
		<dc:creator>Olcay KÜK</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ADO]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1302</guid>
		<description><![CDATA[ADO&#8217;nunun kullanım kolaylığı ve işlevselliğine rağmen çoklu veri kaynaklarını referanse etmek, hiyerarşik verileri yönetmek ve XML ile çalışmak açısından hangi eksikliklerini bulunduğunu incelemiştik. Microsoft&#8217;un .NET platformu ile gelen ADO+ ise bu eksiklikleri gideren yeni ve tam bir araç takımını Web geliştiricilerin hizmetine sunmaktadır. Bağlantı (connection) ve Komut (command) nesneleri dahil ADO+ nesne modelinin bazı özelliklerini [...]]]></description>
			<content:encoded><![CDATA[<p>ADO&#8217;nunun kullanım kolaylığı ve işlevselliğine rağmen çoklu veri kaynaklarını referanse etmek, hiyerarşik verileri yönetmek ve XML ile çalışmak açısından hangi eksikliklerini bulunduğunu incelemiştik. Microsoft&#8217;un .NET platformu ile gelen ADO+ ise bu eksiklikleri gideren yeni ve tam bir araç takımını Web geliştiricilerin hizmetine sunmaktadır. Bağlantı (connection) ve Komut (command) nesneleri dahil ADO+ nesne modelinin bazı özelliklerini de açıklamış bulunuyoruz. Ayrıca, yeni veri kümesi (dataset) nesnesi hakkında kısaca bir bilgilendirme yapılmış olup burada yine ele alınacaktır. Makalenin ilk bölümünde ADO+&#8217;ın komut nesnesinin ADO&#8217;dakine benzer şekilde nasıl kullanabileceğiniz de anlatılmıştır. ADO+&#8217;da verilerin depo kaynaklarından veri okuyucu (datareader) kullanılarak elde edilmesi için iki adet yönetimli sağlayıcısından yararlanılmaktadır. Şimdi ise, bir depolanmış işlemi çalıştırırarak depolanmış işlemden çıkış alınmasını açıklayacağız. Bu işlem, aşağıdaki koddan da izlenebileceği üzere ParameterDirection&#8217;da parametre değiştirme yoluyla yapılmaktadır (SQL Server&#8217;daki NorthWind veritabanı CustOrderHist işlemi, herhangi bir çıkış parametresine sahip değildir. Bu aşağıda sadece örnekleme amacıyla kullanılmıştır. ) :</p>
<p><strong>SQL Sağlayıcısı: </strong></p>
<p><code><br />
using System.Data;<br />
using System.Data.SQL; </code></p>
<p>public class SQLConnect {<br />
private SQLConnection dataConn = null;<br />
private SQLDataReader reader = null;</p>
<p>public string openConnection(HttpResponse Response,String<br />
dbConnectString,String cmdString) {<br />
try {<br />
dataConn = new SQLConnection(dbConnectString);<br />
SQLCommand sqlCmd = new SQLCommand(cmdString,dataConn);<br />
sqlCmd.CommandType = CommandType.StoredProcedure;</p>
<p>SQLParameter param = sqlCmd.Parameters.Add(new<br />
SQLParameter(&#8220;@CustomerID&#8221;, SQLDataType.Char, 5));<br />
param.Direction = ParameterDirection.Input;<br />
sqlCmd.Parameters["@CustomerID"].Value = &#8220;ALFKI&#8221;;<br />
param = sqlCmd.Parameters.Add(new SQLParameter(&#8220;@output&#8221;,<br />
SQLDataType.Int));<br />
param.Direction = ParameterDirection.Output;</p>
<p>dataConn.Open();<br />
sqlCmd.Execute(out reader);<br />
Response.Write(&#8220;Product Name &#8220;);<br />
Response.Write(&#8221; Total<br />
&#8220;);<br />
while (reader.Read()) {<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(reader["ProductName"].ToString());<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(reader["Total"].ToString() + &#8221; &#8220;);<br />
Response.Write(&#8221;<br />
&#8220;);<br />
}<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(sqlCmd.Parameters["@output"].Value;<br />
return &#8221;<br />
SQL Server Data Connection Opened&#8221;;<br />
}<br />
catch (Exception e) {<br />
return(e.ToString());<br />
}<br />
finally {<br />
if (reader != null) {<br />
reader.Close();<br />
}<br />
if (dataConn != null) {<br />
dataConn.Close();<br />
}<br />
}<br />
}<br />
} // End Class</p>
<p><strong>ADO+ Sağlayıcısı: </strong></p>
<p><code><br />
using System.Data;<br />
using System.Data.ADO; </code></p>
<p>public class ADOConnect {<br />
private ADOConnection dataConn = null;<br />
private ADODataReader reader = null;<br />
public string openConnection(HttpResponse Response,String<br />
dbConnectString,String cmdString) {<br />
try {<br />
dataConn = new ADOConnection(dbConnectString);<br />
ADOCommand adoCmd = new ADOCommand(cmdString,dataConn);<br />
adoCmd.CommandType = CommandType.StoredProcedure;<br />
ADOParameter param = null;<br />
param=adoCmd.Parameters.Add(&#8220;@CustomerID&#8221;, ADODBType.Char, 5);<br />
param.Direction = ParameterDirection.Input;<br />
adoCmd.Parameters["@CustomerID"].Value = &#8220;ALFKI&#8221;;</p>
<p>param = adoCmd.Parameters.Add(&#8220;@output&#8221;,ADODBType.Integer);<br />
param.Direction = ParameterDirection.Output;</p>
<p>dataConn.Open();<br />
adoCmd.Execute(out reader);<br />
Response.Write(&#8220;Product Name &#8220;);<br />
Response.Write(&#8221; Total<br />
&#8220;);<br />
while (reader.Read()) {<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(reader["ProductName"].ToString());<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(reader["Total"].ToString());<br />
Response.Write(&#8221;<br />
&#8220;);<br />
}<br />
Response.Write(&#8221; &#8220;);<br />
Response.Write(adoCmd.Parameters["@output"].Value;<br />
return &#8221;<br />
ADO Server Data Connection Opened&#8221;;<br />
}<br />
catch (Exception e) {<br />
return(e.ToString());<br />
}<br />
finally {<br />
if (reader != null) {<br />
reader.Close();<br />
}<br />
if (dataConn != null) {<br />
dataConn.Close();<br />
}<br />
}<br />
}<br />
} //End Class</p>
<p>Depolanmış işlemlerden dönüş değerleri (return values) de benzer tarzda elde edilebilir. Önceki kodda ilgili satırların aşağıdaki gibi değiştirilmesi gerekir:</p>
<p><strong>SQL Sağlayıcısı: </strong><br />
<code></code><br />
<strong>ADO+ Sağlayıcısı: </strong></p>
<p>param = sqlCmd.Parameters.Add(new SQLParameter(&#8220;RT_VAL&#8221;, SQLDataType.Int));<br />
param.Direction = ParameterDirection.ReturnValue;<br />
&#8230;<br />
Response.Write(sqlCmd.Parameters["RT_VAL"].Value;</p>
<p><code><br />
param = adoCmd.Parameters.Add("RETURN_VALUE", ADODBType.Integer);<br />
param.Direction = ParameterDirection.ReturnValue;<br />
...<br />
Response.Write(adoCmd.Parameters["RETURN_VALUE"].Value; </code></p>
<p>Komut nesnesi ile tartışmamız gereken daha bir çok şey olduğu halde bunları başka bir makaleye bırakacağız.</p>
<p><strong>Veri Kümesi Komutu </strong><br />
Komut nesnesi SQL deyimleri ve depolanmış işlemleri çalıştırabiliyorsa, veri kümesi komutu (datasetcommand) nesnesi ile bundan muhtemelen farklı olan neler yapılabilir? Kısaca, bu nesne komut nesnesinin işlevselliğini sağlar, ancak bir veri kümesi nesnesiyle etkileşim (dataset) de sağlamaktadır. Bu ise, veri ızgarası (datagrid) gibi ASP+ nesnelerine daha kolay bağdaştırmaya (binding) izin vermektedir. Veri kümesi komut nesnesinin kullanımı daha önce görümüş olduğumuz komut nesnesininkine benzerdir. Ancak, veri kümesi komut nesnesi, bir veri kaynağından aldığı veriyi daha sonra göreceğimiz gibi bir veri kümesi nesnesine yerleştirebilir. Aşağıda, veri kümesi komut nesnesinin kullanılması ve başlatılması ile ilgili bir örnek verilmiştir. Kod gözden geçirildiğinde nesne isimleri dışındaki farklılık bir yana bırakılırsa, daha önce komut nesnesi için verilen örnekle aynı olduğu görülebilir.</p>
<p><strong>SQL Sağlayıcısı: </strong></p>
<p><code><br />
dataConn = new SQLConnection(dbConnectString);<br />
SQLDatasetCommand dsCmd = new SQLDatasetCommand(cmdString,dataConn); </code></p>
<p><strong>ADO+ Sağlayıcısı: </strong></p>
<p><code><br />
dataConn = new ADOConnection(dbConnectString);<br />
ADODatasetCommand dsCmd = new ADODatasetCommand(cmdString,dataConn); </code></p>
<p>Bu örneklerde, ilgili sağlayıcının veri kümesi komut nesnesi cmdString değişkeninde bulunan deyimin işletilmesi ile elde edilen veriyle doldurulacaktır. Örneğin, eğer cmdString&#8217;e SELECT * FROM Orders geçirilirse veri kümesi komutu (DatasetCommand) Orders tablosundaki tüm sıralar ve sütunlarlarla doldurulmuş olacaktır. Değişik bir yoldan, veri kümesi komut nesnesini doldurmak için mevcut bir komut (command) nesnesini kaynak olarak kullanmak isterseniz, aşağıda gösterileni yapmanız gerekirdi (SQL sağlayıcı için):</p>
<p><code>SQLDatasetCommand dsCmd = new SQLDatasetCommand();<br />
dsCmd.SelectCommand = sqlCmd; </code></p>
<p>Bu örnekler, dsCmd&#8217;ye konulanacak verilerin kaynağı olarak sqlCmd&#8217;ı kullanmaktadır. Veri kümesi komut nesneleri basit bir işlem olan veri kaynağından veri seçme (select)&#8217;den daha fazlasını da yapabilir. Güncelleme (update), silme (delete) ve kayıt (insert) komutlarını da atanabilirler. Bu, her seferinde verilen bir adet komut tipini kabul edebilen normal bir komut nesnesinden farklılık olarak karşımıza çıkmaktadır. Örneğin, bir güncelleme işlemini yapmak için daima depolanmış işlem adını desteklemek yerine bunu sadece bir kez atayabilir ve ondan sonra veri kümesi komut nesnesinin gereksinim duyduğunuz herhangi bir zamanda Update() yöntemi ile çağırabilirsiniz. Bu yöntemin çağrıldığı zamanlarda, atanmış olan depolanmış işlem kullanılabilecektir:</p>
<p><code><br />
String sql = "SELECT * FROM Orders";<br />
SQLDatasetCommmand dsCmd = new SQLDatasetCommand(sql, dataConn);<br />
dsCmd.InsertCommand = "sp_InsertOrder";<br />
dsCmd.InsertCommand.CommandType = CommandType.StoredProcedure;<br />
dsCmd.DeleteCommand = "sp_DeleteOrder";<br />
dsCmd.DeleteCommand.CommandType = CommandType.StoredProcedure;<br />
dsCmd.UpdateCOmmand = "sp_UpdateOrder";<br />
dsCmd.UpdateCommand.CommandType = CommandType.StoredProcedure; </code></p>
<p>dsOrders olarak adlandırılmış bir veri kümesinde yapılan değişiklikler (güncelleme, silme veya ekleme) aşağıdaki işlem ile basit bir şekilde orijinal veri kaynağına aktarılabilmektedir:</p>
<p><code>dsCmd.Update(dsOrders); </code></p>
<p>Ekleme, silme ve güncelleme ile ilgili depolanmış işlemlere parametre geçirilmesine gereksinim duyulduğu durumlarda, veri kümesindeki özel bir alana atanan , parametreler yaratılarak yapılabilir. (Aşağıda SQL parametresi için gösterilmiştir)</p>
<p><code>dsCmd.InsertCommand.Parameters.Add(new SQLParameter<br />
("@CustomerID",SQLDataType.NChar, 5));<br />
dsCmd.InsertCommand.Parameters[0].SourceColumn = "CustomerID"; </code></p>
<p>Veri kümesi komut nesnesinin veri kümesi nesnesi ile nasıl çalıştığını daha iyi anlayabilmek için veri kümesi nesnesinin kullanıldığı birkaç örnek vermenin ve bunun nesne modeli hakkında daha ayrıntılı bazı bilgiler vermenin tam sırası.</p>
<p><strong>Veri kümesi Nesnesi</strong><br />
Bu makalenin ilk bölümünde veri kümesi nesnesinde bulunan eşsiz özelliklerin bazılarını tanıtmıştık. Bir hatırlatma olarak bunları yine sıralarsak:</p>
<p>Bir veri kümesi veri kaynağı (data source) ile doğrudan ilişki içinde değildir (Örneğin bağlantısızdır) Bu yüzden bir veri kümesi veri kaynağı ile ilgili herhangi bir bilgiye sahip değildir.<br />
Bir veri kümesi çok sayıda tablo arasında ilişkiler kurulmasına izin verir.<br />
Bir veri kümesi tablo ilişkileri ön bellekte tutabilir, böylece kurulan ilişkilere bağlı olarak tablolar arasında geçişler mümkündür.<br />
Bir veri kümesi bileşenler arasında veri iletimleri için COM dizelemesi (COM marshalling) kullanmaz. Aksine, endüstri standardı XML kullanır.<br />
ADO+&#8217;ta temel veri yapısı olarak XML kullanıldığından, veri kümeleri sadece COM nesneleri değil her türlü nesneye (ateş duvarlarında herhangi bir karışıklık olmaksızın) veri geçişini sağlayabilir.</p>
<p><img class="alignnone" src="http://www.ceturk.com/resimler/aspnet/dataset1.gif" alt="" width="386" height="368" /><br />
Bu çizimden de görüleceği üzere, veri kümesi ADO&#8217;nun kayıt kümesinden daha güçlüdür. Daha önce değinildiği gibi, bir veri kümesi kod boyunca kullanılabilen çok sayıda tablo ve bu tablolar arasındaki ilişkileri kapsayabilmektedir. Veri kümesini birincilik kürsüsüne yerleştiren şey nedir? Yanıt şaşırtıcı şekilde basittir: Veri kümesi komut nesnesinin FillDataset() yönteminin kullanılması. Bu yöntem, doldurulacak veri kümesi ve veri kümesine eklenecek tabloya referanstan oluşan iki adet parametre kullanır. Bu durum, aşağıda SQL sağlayıcısı kullanılarak örneklenmektedir: </p>
<p><code><br />
public class SQLConnect { </p>
<p>   public string openConnection(HttpResponse Response,String<br />
                                     dbConnectString,String cmdString) {<br />
   try {<br />
     Dataset dsOrders = new Dataset();<br />
     SQLConnection dataConn = new SQLConnection(dbConnectString);<br />
     SQLDatasetCommand dsCmd = new SQLDatasetCommand(cmdString,dataConn);<br />
     dsCmd.FillDataset(dsOrders,"Orders");<br />
     // Loop through Dataset "Orders" table<br />
     Response.Write("Order ID<br />
");<br />
     foreach (DataRow Order in dsOrders.Tables["Orders"].Rows) {<br />
        Response.Write(" ");<br />
        Response.Write(" " + Order["OrderId"].ToString() + " ");<br />
        Response.Write("<br />
");<br />
     }<br />
     Response.Write(" ");<br />
     return "<br />
SQL Server Data Connection Opened";<br />
   }<br />
   catch (Exception e) {<br />
      return(e.ToString());<br />
   }<br />
   }<br />
} //End Class</code> </p>
<p>Bu kod, veri kümesinin döngüye alınma işlemi sırasında bağlantının kapatılmış olmasına karşın daha önce veri okuyucu için gösterilen kod ile çok benzerdir. Kodda, veri kümesi nesnesinin FillDataset() yöntemi çağrılarak veri kümesinin (dsOrders) Orders tablosunun herbir sırasından gelen veriyle veri kümesinin döngüye alınması yoluyla doldurulduğu görülmektedir. Tablo sıralarının bu şekilde döngüye sokmak ve tablo biçimini dikkate almak yerine veri kümesini ASP+&#8217;ın veri ızgarasına bağdaştırmak ve tablonun biçimlenmesiyle uğraşmak çok daha kolay bir yoldur. Alağıdaki örnek, bir ASP+ sayfasında bunun nasıl yapıldığını örneklemektedir: </p>
<p><code><br />
      BackColor="#E6E6CC" BorderColor="#000000" ShowFooter="false"<br />
    CellPadding=5 CellSpacing="0" Font-Name="Arial" Font-Size="8pt"<br />
    HeaderStyle-BackColor="#6C0A00" HeaderStyle-ForeColor="#ffffff"<br />
    MaintainState="false"<br />
  /&gt; </code></p>
<p>Çok daha işlevselliğine rağmen, bu makalede son bir örnek olarak iki tabloyu yüklemek ve verilere hiyerarşik tarzda erişmede veri kümesinin kullanımını tartışacağız. .NET SDK&#8217;deki bir örnek üzerine inşa edilen ve aşağıda gösterilen kod, NorthWind veritabanındaki Customer ve Orders tablolarını dsTables adındaki bir veri kümesine yüklemektedir. Bu tablolar, daha sonra CustomerID alanı üzerinden birbiriyle ilişkilendirilmektedir. Bu iki tablo arasında ilişi yaratılır yaratılmaz bir müşteri ile ilgili olan tüm siparişler, IE4+ tarayıcısı kullanan bir kullanıcısının fare ile tıklamasına bağlı olarak görünen ve gizli duruma geçen bir DIV etiketine aktarılmaktadır. Bu örneği Netscape Navigator 4&#8242;te de çalıştırmak üzere kod üzerinde bazı küçük değişiklerin yapılması gerekir. Çünkü, NN farklı bir DTML nesne modeli kullanmaktadır. </p>
<p><code><br />
     %lt;h2&gt;Customer Orders</code></p>
<p>Kod incelendiğinde, ilk olarak, sayfanın ilk yüklenişi sırasında iki tablodan veri elde etmek için kullanılan SQL dizelerinin yaratıldığı görülebilir. Daha sonra, SQLConnect sınıfı başlatılmakta ve bunun returnDataset() yöntemi çağrılmaktadır. Bu yöntem, çalışacağımız iki tabloyu okumak için gerekli SQL deyimleri yanında bağlantı dizesini (connection string) parametre olarak kullanmaktadır. Tablolar FillDataset() yöntemi kullanılarak veri kümesine (dsTables) yerleştirilir ve bu iki tablo arasında bir ilişki tanımlanır. Bu ilişki, her iki tabloda bulunan CustomerID alanı üzerinden Customers tablosu ile Orders tablosu arasında birlikte çalışmayı mümkün kılar. Bu işlemler tamamlandıktan sonra, yeni veri kümesi döngü işleminin başlatıldığı Page_Load() olay işlemine geri yüklenir. Döngü, veri kümesi içinde bulunan Custormer tablosundaki tüm sıraları geçiş işlemi ile başlatılmaktadır. İkinci bir döngü ise, mevcut müşteri sırasında bulunan müşterinin Orders tablosunda olabilecek siparişlerini araştırmak için çalışmaktadır. Tablolar arasında kurulan ilişki bu işlem için kullanılır: </p>
<p><code><br />
  foreach (DataRow Order in Customer.GetChildRows( _<br />
           TablesDataset.Relations["CustomerOrders"])) {<br />
   ...<br />
} </code></p>
<p>Bu işlemin, her iki tabloda bulunan CustomerID alanına dayanan bir iç-eklem (inner join) yaratımı olduğu anlaşılmaktadır. Eğer herhangi bir ilişki mevcut ise, sipariş bilgisi mevcut müşteri için çıkış dizesine (output string) eklenmektedir.Tüm bu döngü işlemi tamamlandıktan sonra, çıkış dizesi content olarak adlandırılmış bir DIV etiketine yazılmakta ve son kullanıcu belli bir müşteri tarafından yapılmış siparişleri görebilmektedir. </p>
<p>Microsoft® Sistem Mühendisi<br />
Microsoft® Veri Tabanı Yöneticisi<br />
Microsoft® Eğitmen<br />
Bilgisayar Mühendisi<br />
Webmaster<br />
Ayhan ERGUN </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/web-teknolojileri/net-anacatisinda-ado-ve-c-bolum-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
