<?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"
	>

<channel>
	<title>Net Anlatım .Net Geliştirme</title>
	<atom:link href="http://www.netanlatim.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.netanlatim.com</link>
	<description>Net Anlatım VB.Net Programlama Sayfası</description>
	<pubDate>Sat, 05 Jan 2008 12:56:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>ASP.NET&#8217;te Rol Tabanlı(Rol-Based) Güvenlik</title>
		<link>http://www.netanlatim.com/aspnette-rol-tabanlirol-based-guvenlik.html</link>
		<comments>http://www.netanlatim.com/aspnette-rol-tabanlirol-based-guvenlik.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:56:49 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[ASP]]></category>

		<category><![CDATA[ASP.NET dili]]></category>

		<category><![CDATA[Rol Tabanlı]]></category>

		<category><![CDATA[Rol-Based Güvenlik]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/aspnette-rol-tabanlirol-based-guvenlik.html</guid>
		<description><![CDATA[Rol tabanlı güvenliğin ASPNET&#8217;te nasıl uygulandığına geçmeden önce rolün    ne olduğu ve uygulamalar içerisinde nasıl bir önem taşıdığı incelenmelidir.    Bu tür bir inceleme için bir forum sitesi iyi bir örnek olarak verilebilir.    Bir forum sitesini kullanan kullanıcıların aşağıdaki gibi rolleri olabilmektedir.
      [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" st="text-align:justify"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10pt" lang="TR">Rol tabanlı güvenliğin ASPNET&#8217;te nasıl uygulandığına geçmeden önce rolün    ne olduğu ve uygulamalar içerisinde nasıl bir önem taşıdığı incelenmelidir.    Bu tür bir inceleme için bir forum sitesi iyi bir örnek olarak verilebilir.    Bir forum sitesini kullanan kullanıcıların aşağıdaki gibi rolleri olabilmektedir.<o:p></o:p></span></font></font></p>
<p class="MsoNormal" st="margin-left:36.0pt;text-align:justify;text-indent: -18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>1)</strong><span st="font:7.0pt "Times New Roman"">  </span></span></span>    <!--[endif]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR">Sistem Yöneticisi, ekleme, silme güncelleme    gibi işlemlerin hepsini yapabilen en yetkili kullanıcıdır.<o:p></o:p></span></font></font></p>
<p class="MsoNormal" st="margin-left:36.0pt;text-align:justify;text-indent: -18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>2)</strong><span st="font:7.0pt "Times New Roman"">  </span></span></span>    <!--[endif]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR">�Moderator�, sadece gelen mesajları onaylayabilir<o:p></o:p></span></font></font></p>
<p class="MsoNormal" st="margin-left:36.0pt;text-align:justify;text-indent: -18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>3)</strong><span st="font:7.0pt "Times New Roman"">  </span></span></span>    <!--[endif]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR">�Abone�, yeni mesaj yaratabilir, mesajları    okuyabilir, yönetici özelliklerini barındırmaz.<o:p></o:p></span></font></font></p>
<p class="MsoNormal" st="margin-left:36.0pt;text-align:justify;text-indent: -18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>4)</strong><span st="font:7.0pt "Times New Roman"">   </span></span></span>    <!--[endif]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR">Diğer (genel Internet kullanıcıları), sadece    mesajları okuyabilirler.<o:p></o:p></span></font></font></p>
<p><span id="more-394"></span></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">ASP    ile geliştirilen uygulamalarda genel yaklaşım kullanıcıyı diğerlerinden ayırt    eden kimlik bilgisinin (�userid�) �Session� nesnesinde saklanması ve ilgili    kullanıcının yetki bilgisinin veritabanından sorgu ile alınmasıdır. <o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><span st="mso-tab-count:1"> </span><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><br />
</span></font></font></p>
<table bgcolor="#fee7bc" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><font color="#0000ff">int </font>currentUserID          = Session(&#8221;UserID&#8221;)<o:p></o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><font color="#0000ff">string</font> userType          = myDatabaseLookupFunction( currentUserID )<o:p></o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><font color="#009900">//Sadece System Administrator&#8217;ları          ve Moderatörlerine izin var.<o:p></o:p></font><o:p></o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><font color="#0000ff">switch</font>(userType<o:p></o:p>)<br />
{<br />
<font color="#0000ff">case</font> &#8220;1&#8243;:<o:p></o:p><br />
<font color="#0000ff">case</font> &#8220;2&#8243; :<o:p></o:p><br />
<span st="mso-tab-count:2"> </span>// Geçerli          kullanıcı<br />
<span st="mso-tab-count:1"> </span><font color="#0000ff">case</font>          Else :<o:p></o:p><br />
</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">// Yetkisiz Kullancı<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><o:p><br />
} </o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size: 10.0pt;font-family:"Courier New"" lang="TR"><span st="color: blue"><o:p></o:p></span></span></font></td>
</tr>
</table>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><br />
</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">Bu    tarz kod parçaları yetki kontrolünün yapılmasını gerektiren her sayfada yer    almakta ve her defasında veritabanına bir sorgu gönderip sonuç almaya sebep    olmaktadır.<o:p></o:p></p>
<p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">ASP.NET    teknolojisi ile bu yaklaşım değişmektedir. <o:p></o:p></p>
<p></span></font><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span><span st="font-size:16.0pt;mso-bidi-font-size:12.0pt" lang="TR">Temeller    (�Principals�), Roller ve Kimlikler<o:p></o:p></span></font></strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:16.0pt;mso-bidi-font-size:12.0pt" lang="TR"><o:p></o:p></span></font></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></strong></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR">�Windows�    işletim sistemlerinde kullanıcılar ve kullanıcıların bağlı bulunduğu grup tanımlamaları    bulunmaktadır. Örneğin, güvenli bir ağa erişmek isteyen istemci, bir kullanıcı    adı ile bu kullanıcı adının bağlı bulunduğu bir yada daha fazla grup bilgisine    ihtiyaç duymaktadır. .NET terminolojisinde, kullanıcı adı ve grup kavramları    kimlik ve rol olarak isimlendirilmektedir. Kodsal açıdan bakılırsa, kimlik ve    rol bilgileri �Principal� isimli nesne içerisinde saklanmaktadır. Rol tabanlı    güvenliğin nasıl sağlandığının daha iyi anlaşılabilmesi için, öncelikle bu üç    kavramın birbirleri ile olan ilişkileri incelenmelidir. Kodlama örnekleri ilerleyen    başlıklar altında verilecektir.</span></font></font></p>
<h3><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt" lang="TR">Kimlikler<o:p></o:p></span><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p> </o:p></span></font></font></h3>
<p class="MsoBodyText2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">Kimlikler    kullanıcıları temsil etmektedirler. �System.Security.Principal� isim alanı altında    bulunan, kullanıcı özelliklerinin tanımlanmasını sağlayan �WindowsIdentity�    ve �GenericIdentity� sınıflarının yardımı ile gerekli kodlamalar yapılabilmektedir.    <o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p> </o:p></span></font></font></p>
<h3><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt" lang="TR">Roller<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font></font></h3>
<p class="MsoBodyText2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">Kodlamada    en basit şekilde metin dizini olarak yaratılıp �Principal� nesnesine eklenirler.<o:p></o:p><br />
</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><br />
</span><span st="font-size:10.0pt" lang="TR"><font color="#0000ff">string</font>[]    roleString = {&#8221;manager&#8221;, &#8220;cleaner&#8221;}</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font></font></p>
<h3><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt" lang="TR">�Principals�<o:p></o:p></span></font></font></h3>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><em><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></em></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10.0pt" lang="TR">Bir �Principal� nesnesi anlık kullanıcının kimlik ve rol bilgilerini taşımaktadır.    Bu nesne �System.Security.Principal� �namespace� i altında yer alan �WindowsPrincipal�    ve �GenericPrincipal� sınıfları kullanılarak yaratılmaktadır.<o:p></o:p></p>
<p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10.0pt" lang="TR">.NET ortamında çalışma zamanında, yetki kontrolünün gerektiği durumlarda,    kullanıcı kimlik ve rol bilgilerini taşıyan �Principal� nesnesine ihtiyaç duyulmaktadır.    Bu sebepten dolayı �authentication� işlemi sırasında gerçekliği doğrulanmış    olan kullanıcı ve onun rol bilgileri �Principal� nesnesine atanmalıdır.<o:p></o:p></span></font></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt" lang="TR">Kod    Örneği<o:p></o:p></span></font></strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></strong></font></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">Aşağıdaki    kod global.asax dosyası içerisine yazılmalıdır;<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><o:p><br />
</o:p></span></font></font></p>
<table bgcolor="#fee7bc" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><font color="#0000ff">public void</font> Application_AuthenticateRequest(<font color="#0000ff">object</font>          sender, </span><span st="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"" lang="TR">EventArgs          e)<o:p><br />
{ </o:p></p>
<p></span><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">System.Web.Security.FormsIdentity<o:p> id;</o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"" lang="TR">   </span><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><span st="mso-tab-count:1"> </span>id = HttpContext.Current.User.Identity<o:p>;</o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"" lang="TR">   </span><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><span st="mso-spacerun:yes"> </span>string<o:p>[]          MyRoles = new string[2];</o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><span st="mso-spacerun:yes"> </span></span><span st="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"" lang="TR">   </span><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">MyRoles[0] = &#8220;Manager&#8221;<o:p>;</o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><span st="mso-spacerun:yes"> </span></span><span st="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"" lang="TR">   </span><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">MyRoles[1] = &#8220;Admin&#8221;<o:p>;</o:p></span></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><span st="mso-spacerun:yes"> </span><span st="mso-tab-count:1"> </span></span><span st="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"" lang="TR">  </span><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">HttpContext.Current.User = new <o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">System.Security.Principal.GenericPrincipal(id,MyRoles)          <o:p></o:p><br />
</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR">}<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size: 10.0pt;font-family:"Courier New"" lang="TR"><span st="color: blue"><o:p></o:p></span></span></font></td>
</tr>
</table>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt;mso-bidi-font-size: 12.0pt;font-family:"Courier New"" lang="TR"><o:p> </o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10.0pt" lang="TR">Yukarıdaki kod parçasında, önceden belirlenmiş rol tanımları ve kimlik    bilgileri �authentication� işlemini gerçekleştiren kullanıcı için �Principal�    nesnesine atanmaktadır. <o:p></o:p></span></font></font></p>
<p class="MsoBodyText2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR">�FormsAuthentication�    nesnesinin çalışma mantığı hatırlanırsa, bir kullanıcının gerçekliği kanıtlanmakta    (�authentication�)<span st="mso-spacerun:yes"> </span>ve bir cookie yaratılmaktadır.    �Application_AuthenticateRequest� metoduda bu sırada sistem tarafından çağırılmaktadır.    Bu yüzden, kullanıcıya dinamik olarak rol ataması için bu metot uygun bir yerdir.<o:p></o:p></span></font></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong><span lang="TR">Özet<br st="mso-special-character:line-break" />   <!--[if !supportLineBreakNewLine]-->   <br st="mso-special-character:line-break" />   <!--[endif]-->   <o:p></o:p></span></strong></font></font></p>
<p class="MsoNormal" st="margin-left:36.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo5; tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size: 10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>1)</strong><span st="font:7.0pt "Times New Roman"">  </span></span></span><span st="mso-bidi-font-size:10.0pt" lang="TR">Kullanıcı    adı ve şifresi kontrol edilir,<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10.0pt" lang="TR"><o:p></o:p></span></font></font></p>
<p class="MsoNormal" st="margin-left:36.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo5; tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size: 10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>2)<span st="font:7.0pt "Times New Roman""></span></strong><span st="font:7.0pt "Times New Roman"">     </span></span></span>    <!--[endif]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR">Kullanıcı için tanımlı olan roller    çekilir,<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p>(VB.NET    Kodu)</o:p></span></font></font></p>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-tab-count:1">        </span>Dim strRoles() As String</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span><span st="mso-tab-count: 1">      </span>Dim arrRoles As New ArrayList()</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span><span st="mso-tab-count:1">      </span>&#8216; do some database call that returns a reader</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span><span st="mso-tab-count: 1">      </span>While reader.Read()</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">   </span><span st="mso-tab-count:2">            </span><span st="mso-spacerun:yes"> </span>arrRoles.Add(reader(&#8221;role&#8221;))</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span><span st="mso-tab-count: 1">      </span>End While</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span><span st="mso-tab-count:1">      </span>strRoles = arrRoles.ToArray(GetType(String), String())</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p> </o:p></span></font></font></pre>
<p class="MsoNormal" st="margin-left:36.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo5; tab-stops:list 36.0pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <!--[if !supportLists]-->   <span st="mso-bidi-font-size: 10.0pt" lang="TR"><span st="mso-list:Ignore"><strong>3)<span st="font:7.0pt "Times New Roman""></span></strong><span st="font:7.0pt "Times New Roman"">     </span></span></span>    <!--[endif]-->   <span st="mso-bidi-font-size:10.0pt" lang="TR">Kimlik ve rol bilgileri �Principal�    nesnesine atanır,<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size: 10.0pt" lang="TR"><o:p> </o:p></span></font></font></p>
<p class="MsoNormal" st="margin-left:35.25pt"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:10.0pt" lang="TR">Dim objPrincipal As GenericPrincipal = New GenericPrincipal(objIdentity,    strRoles)</span><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:10.0pt" lang="TR"><o:p></p>
<p><strong>4)</strong><span st="font:7.0pt "Times New Roman"">  </span></o:p></span><span lang="TR">HttpContext.Current.User=</span> objPrincipal<span st="font-size:10.0pt" lang="TR"><o:p></o:p></p>
<p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><code><span st="font-size:10.0pt" lang="TR"><o:p></o:p></span></code></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><code><span st="font-size:10.0pt" lang="TR"><o:p></o:p></span></code></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><code><span st="font-size:16.0pt;mso-bidi-font-size:10.0pt" lang="TR"><o:p></o:p></span></code></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p></o:p></span></font></font></p>
<h2><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:16.0pt;mso-bidi-font-size:10.0pt; font-family:"Times New Roman"" lang="TR">Kullanıcı Rolü Kontrolleri</span><span st="mso-ansi-font-size:12.0pt;font-family:"Times New Roman"" lang="TR"><o:p></o:p></span></font></font></h2>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR">Uygulama    içerisinde �Principal� nesnesinin içeriğine erişmek için dört ayrı yöntem bulunmaktadır.    Bu yöntemler �Configuratively�, �Programmatically�, �Imperatively� ve �Declaratively�    olarak isimlendirilmektedir. Burada ilk iki yöntem anlatılmaktadır.<o:p></o:p></span></font></font></p>
<p class="MsoNormal"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p></o:p></span></font><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt; mso-fareast-font-family:"Courier New"" lang="TR">Konfigürasyon Yöntemi(Configuratively)</span></font></strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-bidi-font-size:12.0pt;mso-fareast-font-family: "Courier New"" lang="TR"><o:p></o:p></span></font></font></p>
<p class="MsoBodyText2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR">Gerekli    yetki kontrolü web.config dosyasında tanımlanmaktadır. Örneğin geliştirilen    bir uygulamada, yönetim ile ilgili sayfalara sadece yönetici ve �moderator�    tanımlı kullanıcıların erişmesi gerekmektedir. Bu durumu geçerli kılmak için    aşağıda gösterildiği gibi bir kodlama yapılabilmektedir.<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p> </o:p></span></font></font></p>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR">&lt;authorization&gt;</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span>&lt;deny users=&#8221;*&#8221; /&gt;</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-spacerun:yes">  </span>&lt;allow roles=&#8221;SysAdmin, Moderator&#8221; /&gt;</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR">&lt;/authorization&gt;</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p> </o:p></span></font></font></pre>
<p class="MsoBodyText2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR">Bu    yöntemin klasik ASP güvenlik yaklaşımı ile kıyaslandığında, yazılım geliştirenin    işini kolaylaştırdığı görülmektedir. ASP teknolojisinde, güvenlik kontrolünün    gerektiği her sayfaya ilgili kontrol kodları eklenmektedir.<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p> </o:p></span></font></font></p>
<h3><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="font-size:14.0pt;mso-bidi-font-size:12.0pt; mso-fareast-font-family:"Courier New"" lang="TR">Programsal Olarak(Programmatically)</span><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p></o:p></span></font></font></h3>
<p class="MsoBodyText2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR">Kod    içerisinden yetki kontrolü yapmakta mümkündür. Örneğin, bir forum sitesinde    genel Internet kullanıcılarının yazılanları okuması ancak yeni bir konu yaratamaması    istenmektedir. Dolayısıyla yeni konu isimli köprü bu tip kullanıcılara gösterilmeyecektir.<o:p></o:p></span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span st="mso-fareast-font-family:"Courier New"" lang="TR"><o:p></o:p></span></font></font></p>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR">if(!User.IsInRole(&#8221;public&#8221;))</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR"><span st="mso-tab-count:1">  </span><span st="mso-spacerun:yes">  </span>// göster</span></font></font></pre>
<pre><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR">else
</span></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><span lang="TR">
 <span st="mso-spacerun:yes">  </span>// gösterme</span></font></font></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/aspnette-rol-tabanlirol-based-guvenlik.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Connection (Bağlantı) Kavramı ve OleDbConnection Sınıfı</title>
		<link>http://www.netanlatim.com/connection-baglanti-kavrami-ve-oledbconnection-sinifi.html</link>
		<comments>http://www.netanlatim.com/connection-baglanti-kavrami-ve-oledbconnection-sinifi.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:56:05 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[Bağlantı Kavramı]]></category>

		<category><![CDATA[Connection kavramı]]></category>

		<category><![CDATA[OleDbConnection Sınıfı]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/connection-baglanti-kavrami-ve-oledbconnection-sinifi.html</guid>
		<description><![CDATA[ Bu makalemizde, ADONET mimarisinde  temel yapı taşı olan Connection (Bağlantı) kavramına kısaca değinecek ve OleDbConnection  sınıfını incelemeye çalışacağız. ADO.NET mimarisinde, pek çok sınıfın veri kaynakları  ile olan iletişiminde Connection (Bağlantı) nesnelerini kullanırız. Örneğin, bir  veri kayağındaki tablolara ait verileri, DataSet sınıfından bir nesne örneğine  taşımak istediğimizi düşünelim. Bu dataSet [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt" face="Verdana">Bu makalemizde, ADONET mimarisinde  temel yapı taşı olan Connection (Bağlantı) kavramına kısaca değinecek ve OleDbConnection  sınıfını incelemeye çalışacağız. ADO.NET mimarisinde, pek çok sınıfın veri kaynakları  ile olan iletişiminde Connection (Bağlantı) nesnelerini kullanırız. Örneğin, bir  veri kayağındaki tablolara ait verileri, DataSet sınıfından bir nesne örneğine  taşımak istediğimizi düşünelim. Bu dataSet nesnesini dolduracak olan DataAdapter  sınıfına, sahip olduğu sql sorgusunun veya komutunun işleyeceği bir hattı belirtmemiz  gerekir. İşte burada devreye Connection (Bağlantı) nesnelerimiz girer. Yada bir  Command sınıfı nesnesi yardımıyla veritabanı üzerindeki bir saklı yordamı (stored  procedure) çalıştırmak istediğimizi düşünelim. Bu durumda komutun çalıştırılabileceği  bir hattı veri kaynağımız ile Command nesnesi arasında sağlamamız gerekir. İşte  Connection (Bağlantı) nesnemizi kullanmamız için bir sebep daha.</font>  </font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Verdiğimiz bu basit  örneklerdende anlaşıldığı gibi, Connection(bağlantı) sınıfları, veri kaynağına  bir hat çekerek, ADO.NET nesnelerinin bu hat yardımıyla işlemlerini  gerçekleştirmelerine imkan sağlarlar. Ancak sahip olunan veri kaynağının türüne  göre, ADO.NET içerisine değişik Connection sınıfları eklenmiştir. DotNet&#8217;in ilk  sürümünde OleDbConnection ve SqlConnection nesneleri ile bu hatlar temin  edilirken, .NET Framework 1.1 sürümü ile birlikte, OdbcConnection ve  OracleConnection sınıflarıda ADO.NET kütüphanelerine dahil edilerek Odbc ve  Oracle veri kaynaklarına bağlantılar sağlanması imkanı kazandırılmıştır. </font></font></p>
<p><span id="more-393"></span></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">OleDbConnection  sınıfı ile, bir OleDb Data Provider (veri sağlayıcısı) üzerinden, ole db  destekli veri kaynaklarına erişim sağlayabiliriz. SqlConnection sınıfı Sql  Sunucularına doğrudan bağlantı sağlar. Aynı şekilde OracleConnection sınıfıda  Oracle veri kaynaklarına doğrudan erişim sağlar. OdbcConnection sınıfı ise odbc  destekli veri kaynaklarına erişim için kullanılır. Bu makalemizde bu bağlantı  sınıflarından OleDbConnection sınıfını inceleyeceğiz. OleDbConnection sınıfı,  ADO.NET sınıflarının , Ole Db desteği olan veri kaynaklarına erişebilmesi  amacıyla kullanılır. Veri kaynağının tipi tam olarak bilinmediği için, arada bu  işlevi ayırt etmeye yarayan bir COM+ nesnesi yer almaktadır. OleDbConnection  sınıfına ait bir nesne iletişim kurmak istediği veri kaynağına ait ole db veri  sağlayıcısını belirtmek durumundadır. Bunu daha iyi kavramak için aşağıdaki  şekle bakalım.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2"><em> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_1.gif" border="0" height="400" width="600" /></em></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 1.  OleDbConnection ile Veri Kaynaklarına Bağlantı.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi bir   OleDbConnection nesnesi öncelikle bir Ole Db Data Provider ( Ole Db Veri  Sağlayıcısı) ile iletişim kurar. Ardından bu veri sağlayıcı istenen veri  kaynağına erişerek, gerekli hattı tesis etmiş olur. Peki bu işlemi nasıl  gerçekleştireceğiz. İşte tüm Connection nesnelerinin en önemli özelliği olan  ConnectionString özelliği bu noktada devreye girmektedir. Kısaca  ConnectionString özelliği ile, veri kaynağı ile sağlanacak olan iletişim  hattının kurulum bilgileri belirlenir. OleDbConnection sınıfı için  ConnectionString özelliği aşağıdaki prototipe sahiptir.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber10" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p align="left"><font style="font-size: 10pt" face="Verdana"><strong>public virtual </strong>string<strong> ConnectionString {get; set;}</strong></font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">ConnectionString  özelliği belirlenmiş bir OleDbConnection sınıfı nesne örneğini açtığımızda, yani  veri kaynağına olan hattı kullanılabilir hale getirdiğimizde, bu özellik  yanlız-okunabilir (read-only) hale gelir. Dolayısıyla açık bir OleDbConnection  nesnesinin ConnectionString özelliğini değiştiremezsiniz. Bunun için bu  bağlantıyı tekrardan kapatmanız gerekecektir. ConnectionString özelliği, bir  takım anahtar-değer çiftlerinin noktalı virgül ile ayırlmasından oluşturulan  string bir bilgi topluluğudur. ConnectionString özelliği içinde  kullanabileceğimiz bu anahtar-değer çiftlerinin en önemlisi Provider  anahtarıdır. Bu anahtara vereceğimiz değer, hangi tip ole db veri sağlayıcısını  kullanmak istediğimizi belirtmektedir. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Örneğin Sql  sunucusuna, Sql Ole Db Provider ile bağlanmak istersek, Provider anahtarına,  SQLOLEDB değerini atarız. Provider anahtarı mutlaka belirtilir. Daha sonraki  anahtar-değer çiftleri ise bu Provider seçimine bağlı olarak değişiklik  gösterecektir. Veri kaynağına hangi tip Ole Db Veri Sağlayıcısından  bağlandığımızı seçtikten sonra, bağlanmak istediğimiz veri kaynağıda belli olmuş  olucaktır. Sırada bu veri kaynağının adını veya adresine belirteceğimiz  anahtar-değer çiftlerinin belirlenmesi vardır. Örneğin bir Sql Sunucusuna  bağlanıyorsak, sunucu adınıda Ole Db Data Provider( Veri Sağlyacısı) &#8216;na  bildirmemiz gerekir. Bunun için Data Source anahtarını kullanırız. Bununla  birlikte bağlandığımız veri kaynağı, sql yada oracle gibi bir veritabanı yönetim  sistemi değilde, Access gibi bir tablolama sistemi ise, Data Source anahtarı,  tablonun fiziki adresini alır. Sql ve Oracle gibi sunuculara yapılacak  bağlantılarda Provider ve Data Source seçiminin yanında hangi veritabanına  bağlanılacağınıda Initial Catalog anahtarı yada Database anahtarı ile  belirleriz. Bunların dışında veri kaynağına yapılacak olan bağlantının güvenlik  ayarlarınıda belirtiriz. Çoğunlukla Integrated Security gibi bir anahtara True  değerinin atandığını görürüz. Bu anahtar, veri kaynağına bağlanmak istenen  uygulama için, makinenin windows authentication ayarlarına bakıldığını belirtir.  Dolayısıyla sql sunucusuna bağlanma yetkisi olan her windows kullanıcısı bu  bağlantıyı sağlayabilir. Ancak istersek belli bir kullanıcı adı veya şifresi  ilede bir veritabanına bağlantı açılmasını sağlayabiliriz. Bunun için ise, User  ID ve Password anahtarlarını kullanırız. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Buraya kadar  bahsettiklerimiz kavramsal açıklamalardır. Dilerseniz basit örnekler ile konuyu  daha iyi açıklamaya çalışalım. Örneklerimizi Console uygulamaları şeklinde  gerçekleştireceğiz. İlk örneğimizde, Sql Sunucusundaki veritabanı için, bir  bağlantı hattı oluşturup açacağız.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber1" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data.OleDb; </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* OleDbConnection sınıfı,      Data.OleDb isim uzayında yer almaktadır. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">namespace</font></font><font style="font-size: 10pt" face="Verdana">      OleDbCon1</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">{ </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">          class</font><font style="font-size: 10pt" face="Verdana"> Class1</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">          {</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">               static</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      Main(</font><font style="font-size: 10pt" color="#0000ff">string</font></font><font style="font-size: 10pt" face="Verdana">[]      args)</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">               {</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                    OleDbConnection conFriends=</font></font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">      OleDbConnection(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* OleDbConnection nesnemiz      oluşturuluyor. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">                   </font><font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      ConnectionString özelliği belirleniyor. Provider (Sağlayıcımız) SQLOLEDB. Bu      bir sql sunucusuna bağlanmak istediğimizi belirtir. Data Source anahtarına      localhost değerini atayarak, sunucunun yerel makinede olduğunu belirtiyoruz.      Ancak buraya başka bir adreste girilebilir. Sunucunuz nerede ise oranın      adresi. Database ile, bağlantı hattının açılacağı veritabanını belirliyoruz.      Burada sql sunucumuzda yer alan Friends veritabanına bağlantı hattı      açıyoruz. Son olarak Integrated Security=SSPI anahtar-değer çifti sayesinde      Windows Doğrulaması ile sunucuya bağlanabileceğimizi belirtiyoruz. Yani sql      sunucusuna bağlanma yetkisi olan her windows kullanıcısı bu hattı tesis      edebilecek.*/</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">                    conFriends.ConnectionString=&#8221;Provider=SQLOLEDB;Data      Source=localhost;Database=Friends;Integrated Security=SSPI&#8221;;</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                   </font></font><font color="#0000ff">     <font style="font-size: 10pt" face="Verdana">try</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">                    {</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                         conFriends.Open(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Open metodu ile      oluşturduğumuz iletişim hattını kullanıma açıyoruz. */</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">                         Console.WriteLine(&#8221;Bağlantı açıldı&#8230;&#8221;);</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                         conFriends.Close(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Close metodu ilede      oluşturulan iletişim hattını kapatıyoruz. */    </font></font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                         Console.WriteLine(&#8221;Bağlantı kapatıldı&#8230;&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                    }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">                    catch</font><font style="font-size: 10pt" face="Verdana">(Exception hata)</font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                    {</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                         Console.WriteLine(hata.Message.ToString());</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                    }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">               }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_2.gif" border="0" height="115" width="269" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 2.  Uygulamanın Çalışmasının Sonucu.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Aynı örnekte bu kez  belli bir kullanıcı ile bağlanmak istediğimizi düşünelim. Bu durumda  ConnectionString&#8217;imizi aşağıdaki şekilde değiştirmemiz gerekir. Bu durumda User  ID ve Password anahtarlarına gerekli kullanıcı değerlerini atarız.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber2" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" face="Verdana">     </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">conFriends.ConnectionString=&#8221;Provider=SQLOLEDB;Data      Source=localhost;Database=Friends;User Id=sa;Password=CucP??80.&#8221;;</font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdide bir Access  tablosuna nasıl bağlanabileceğimizi görelim. Bunun için ConnectionString  özelliğimizi aşağıdaki gibi yazarız.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber3" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">OleDbConnection      conYazarlar=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      OleDbConnection(&#8221;Provider=Microsoft.Jet.OLEDB.4.0;data      source=c:\\Authors.mdb&#8221;);</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">try</font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          conYazarlar.Open(); </font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(&#8221;Yazarlar Access veritabanına bağlantı açıldı&#8230;&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          conYazarlar.Close();</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(&#8221;Yazarlar Access veritabanına olan bağlantı      kapatıldı&#8230;&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">catch</font><font style="font-size: 10pt" face="Verdana">(Exception      hata)</font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(hata.Message.ToString());</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_3.gif" border="0" height="91" width="485" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 3. Access  Veritabanına Bağlatı.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu örnekte dikkat  ederseniz ConnectionString özelliğini, OleDbConnection nesnemizin diğer yapıcı  metodu içerisinde parametre olarak belirledik. Ayıraca, Provider olarak bu kez  Microsoft.Jet.OLEDB.4.0 &#8216;ı seçerek, bir Access veritabanına bağlanmak  istediğimizi bu Ole Db Provider&#8217;a bildirmiş olduk. Daha sonra bu veri sağlayıcı  componenti, Data Source anahtarındaki değere bakarak, ilgili adresteki  veritabanına bir hat çekti.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Başka bir  ConnectionString anahtarıda File Name dir. Bu anahtara bir udl uzantılı dosya  adresi vererek, bağlantı hattının bu dosyadaki ayarlar üzerinden  gerçekleştirilmesini sağlayabiliriz. Bir udl dosyası Data Link Properties ( veri  linki özellikleri) özelliklerini belirler. Böyle bir dosya oluşturmak son derece  basittir. Bir text editor ile boş bir dosya açın ve onu udl uzantısı ile  kaydedin. Bu durumda dosyamızın görünümü şu şekilde olucaktır.</font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_4.gif" border="0" height="71" width="72" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 4. Bir  udl dosyasının görüntüsü.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu dosyayı  açtığımızda hepimizin aşina olduğu veritabanı bağlantı seçenekleri ile  karşılaşırız.</font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_5.gif" border="0" height="467" width="367" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 5.  Connection ayarları.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu penceredeki  adımları takip ederek bir ConnectionString&#8217;i bir udl dosyasına kaydedebilir ve  OleDbConnection nesnemiz için sadece File Name anahtarına bu değeri vererek  ilgili bağlantının, bu udl dosyasındaki ayarlar üzerinden gerçekleştirilmesini  sağlayabiliriz. İlk yapmamız gereken ConnectionString özelliğinde olduğu gibi ,  Provider (Sağlayıcı) seçimidir. </font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_6.gif" border="0" height="467" width="367" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 6.  Provider Seçimi.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Burada örnek olarak  Sql Server Provider&#8217;ımızı seçelim. Sonraki adımda ise sırasıyla sunucu adımızı  (Server Name), sunucuya hangi kimlik doğrulaması ile bağlanacağımızı ve  veritabanımızın adını seçeriz. Son olarakta bu dosyamızı kaydedelim.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2"><em> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_7.gif" border="0" height="467" width="367" /></em></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 7.  Connection Özelliklerinin belirlenmesi.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi uygulamızı  buna göre değiştirelim.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber4" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">OleDbConnection      con=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      OleDbConnection();</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     con.ConnectionString=&#8221;File Name=C:\\baglanti.udl&#8221;;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">try</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">{</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          con.Open(); </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          Console.WriteLine(&#8221;Bağlantı açıldı&#8230;&#8221;);</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          con.Close();</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          Console.WriteLine(&#8221;Bağlantı kapatıldı&#8230;&#8221;);</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">}</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">catch</font><font style="font-size: 10pt" face="Verdana">(Exception      hata)</font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(hata.Message.ToString());</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_8.gif" border="0" height="91" width="261" /></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 8. Udl  dosyası üzerinden bağlantı açmak ve kapatmak.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Tabiki burada  Visual Studio.Net&#8217;in bağlantı sağlamak için bize sunduğu görsel nimetlerden  sözetmedende geçemeyiz. Visual Studio.NET ortamında, OleDbConnection oluşturmak  için kullanabileceğimiz Server Explorer sekmesi yer almaktadır.</font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_9.gif" border="0" height="259" width="272" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 9. Server  Explorer</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Burada servers  sekmesinde Sql sunucularına erişebiliriz. Buradan tablolara, görünümlere, saklı  yordamlara hatta tabloa alanlarına ulaşabiliriz. Server Explorer&#8217;ın sağladığı  pek çok işlevsellik vardır. Örneğin bu pencereden, bir sql tablosu  yaratabilirsiniz veya bir saklı yordam oluşturabilirsiniz. Hatta bir tabloyu  formunuza sürüklüyerek, gerekli olan tüm ADO.NET nesnelerinin otomatik olarak  oluşturulmasınıda sağlayabilirsiniz. Bu makalemizde OleDbConnection nesnesini  incelediğimiz için bu tip bir bağlantıyı Server Explorer yardımıyla nasıl  gerçekleştireceğimizi inceleyeceğiz. Bunun için  <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_10.gif" border="0" height="28" width="35" />  (Connect  To Database) aracını kullanacağız. Bu butona bastığımızda karşımıza tanıdık Data  Link Properties penceresi gelecektir. Süratli bir şekilde burada gerekli  bağlantı ayarlarını yaptıktan sonra, Server Explorer aşağıdaki görünümü  alıcaktır. Burada örnek olarak bir Access veritabanına bağlantı sağlanmıştır.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2"><em> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_11.gif" border="0" height="347" width="395" /></em></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 10.  Bağlantı oluşturuldu.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Dikkat ederseniz  bağlantımız üzerinden, veri kaynağındaki tablolara ve alanlarına ulaşabiliyoruz.  Şimdi bu bağlantıyı, bir windows uygulamasında veya bir asp.net uygulamasında  forma sürüklediğimizde bir OleDbConnection nesnesinin otomatik olarak  oluşturulduğunu göreceksiniz. İşte bu kadar basit. Artık bu connection nesnesini  kullanabilirsiniz. Diğer yandan Server Explorer&#8217;da oluşturulan bu bağlantıyı  başka uygulamalarda da hazır olarak görebilirsiniz. Data Connection sekmesi  uygulamalarda kullanacağımız veri bağlantılarını hazır olarak bulundurmak için  ideal bir yerdir.</font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_12.gif" border="0" height="374" width="304" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 11.  OleDbConnection1 nesnesinin Server Explorer yarıdımıyla oluşturulması.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Gelelim  OleDbConnection nesnesinin diğer kullanışlı üyelerine. Buraya kadar bir bağlantı  hattını oluşturmak için ConnectionString özelliğinin nasıl kullanıldığını  inceledik. Bununla birlikte var olan bir bağlantı hattını açmak için Open  metodunu, bu bağlantı hattını kapatmak içinde Close metodunun kullanıldığını  gördük. OleDbConnection nesnesinin diğer bir özelliğide ConnectionTimeout  değeridir. ConnectionTimeout özelliği, bir bağlantının sağlanması için gerekli  süreyi belirtir. Bu süre boyunca bağlantı sağlanamaması bir istisnanın  fırlatılmasına neden olucaktır. Bu özellik yanlız-okunabilir (read-only) bir  özellik olduğundan, değerini doğrudan değiştiremeyiz. Bunun için, bu özelliği  ConnectionString içerisinde belirlememiz gerekir. Örneğin aşağıdaki kodlarda,  Sql sunucusuna bağlanabilmek için gerekli süre 10 saniye olarak belirlenmiştir.  Şimdi ben Sql Server servisimizi durduracağım ve uygulamayı çalıştıracağım.  Bakalım 10 saniye sonunda ne olucak.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber5" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">OleDbConnection      conFriends=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      OleDbConnection(); </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     conFriends.ConnectionString=&#8221;Provider=SQLOLEDB;Data      Source=localhost;Database=Friends;User Id=sa;Password=CucP??80.;Connect      Timeout=10&#8243;;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">try</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">{</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          conFriends.Open(); </font></p>
<p></font>     <font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          Console.WriteLine(&#8221;Baglanti açildi&#8230;&#8221;);</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          conFriends.Close(); </font></p>
<p></font>     <font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          Console.WriteLine(&#8221;Baglanti kapatildi&#8230;&#8221;);</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">}</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">catch</font><font style="font-size: 10pt" face="Verdana">(Exception      hata)</font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(hata.Message.ToString());</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu durumda  aşağıdaki hata mesajını alırız. </font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_13.gif" border="0" height="62" width="669" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 12. Sql  sunucusunun olmadığını gösteren istisna.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">OleDbConnection  sınıfının Open ve Close metodları dışındada faydalı metodları vardır. Örneğin  ChangeDatabase metodu. Bu metod ile açık olan bir bağlantı üzerinden, veri  kaynağındaki seçili veritabanını değiştirmemiz sağlanır. Yani hattın ucu başka  bir veritabanına yönlendirilebilir. Bu tabiki Oracle ve Sql gibi veritabanı  sistemlerinde özellikle işe yarar. Örneğin, Friends veritabanına bağlıyken,   açık olan bağlantımız üzerinden hattımızı, pubs veritabanına yönlendirelim.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber6" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">OleDbConnection      conFr=</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">      OleDbConnection(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* OleDbConnection nesnemiz      oluşturuluyor. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     conFr.ConnectionString=&#8221;Provider=SQLOLEDB;Data      Source=localhost;Database=Friends;Integrate/d Security=SSPI&#8221;; </font>     <font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      Bağlantı hattımız için gerekli bilgiler giriliyor. Sql sunucumuzda yer alan      Friends isimli veritabanına bağlandık. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">conFr.Open();     </font><font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      Bağlantımız açılıyor. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     Console.WriteLine(&#8221;Veritabanı &#8220;+conFr.Database.ToString()); </font>     <font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      Şuandaki bağlantının hangi veritabanına yapıldığını OleDbConnection      sınıfının Database özelliği ile öğreniyoruz. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     conFr.ChangeDatabase(&#8221;pubs&#8221;); </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* ChangeDatabase metodu ile      bağlantı hattımızı yönlendirmek istediğimiz veritabanının adını giriyoruz.      */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     Console.WriteLine(&#8221;Şimdiki veritabanı &#8220;+conFr.Database.ToString()); </font>     <font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      Bağlantı hattının şu an yönlendirilmiş olduğu veritabanının adını Database      özelliği ile elde ediyoruz.*/</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">conFr.Close();     </font><font style="font-size: 10pt" color="#008000" face="Verdana">/*      Bağlantımızı kapatıyoruz. */</font></p>
</td>
</tr>
</table>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_14.gif" border="0" height="91" width="285" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 13.  ChangeDatabase metodunun çalışmasının sonucu.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Diğer yararlı bir  metod ise GetOleDbSchemaTable metodudur ki bunu bir önceki makalemizde  incelemiştik. Bunun dışında bir OleDbCommand nesnesini oluşturmaya yarayan  CreateCommand metodu, bir Transaction&#8217;ın başlatılması için kullanılan  BeginTransaction metodu, OleDbConnection&#8217;a ait kaynakları serbest bırakan  Dispose metodu&#8217;da faydalı diğer metodlar olarak sayılabilir. Bu metodlardan  ilerliyen makalelerde yeri geldikçe bahsedeceğiz. OleDbConnection nesnesinin  sadece 3 adet olayı vardır. Bunlar, StateChange, Disposed ve InfoMessage  olaylarıdır. Bunlardan en çok, StateChange olayını kullanırız. Bu olay,  OleDbConnection nesnesinin bağlantı durumunda bir değişiklik olduğunda oluşur.  Bu olayın prototipi aşağıdaki şekildedir.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber7" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p align="left"><font style="font-size: 10pt" face="Verdana"><strong>public event </strong> StateChangeEventHandler<strong> StateChange;</strong></font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu olay  StateChangeEventArgs tipinden bir argüman almaktadır. Bu argüman iki özelliğe  sahiptir. Bunlar CurrentState ve OriginalState özellikleridir. CurrentState  bağlantının o anki drumunu belirtir. OriginalState ise son değişiklikten önceki  halini gösterir. Her iki özellikde  ConnectionState numaralandırıcısı  türünden değerlere işaret ederler.  Bu değerler şunlardır.</font></font></p>
<p align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">  </font><center> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table id="AutoNumber8" border="1" cellpadding="5" cellspacing="1" height="169" width="100%">
<tr>
<td align="center" bgcolor="#ffcc66" height="28" width="187">
<p align="left"><span style="font-weight: 700">       <font face="Verdana" size="2">ConnectionState</font></span><font style="font-size: 10pt; font-weight: 700" face="Verdana">        Değeri</font></p>
</td>
<td align="center" bgcolor="#ffcc66" height="28" width="74%">
<p align="left">       <font style="font-size: 10pt; font-weight: 700" face="Verdana">Açıklaması</font></p>
</td>
</tr>
<tr>
<td height="19" width="187">
<p align="left"><font style="font-size: 10pt" face="Verdana">       ConnectionState.Open</font></p>
</td>
<td height="19" width="74%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Bağlantı açık        ise bu değer geçerlidir.</font></p>
</td>
</tr>
<tr>
<td height="19" width="187">
<p align="left"><font style="font-size: 10pt" face="Verdana">       ConnectionState.Closed</font></p>
</td>
<td height="19" width="74%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Bağlantı        kapandığında bu değer geçerlidir.</font></p>
</td>
</tr>
<tr>
<td height="19" width="187">
<p align="left"><font style="font-size: 10pt" face="Verdana">       ConnectionState.Connecting</font></p>
</td>
<td height="19" width="74%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Bağlantı        hattı iletişime açılırken bu değer geçerlidir.</font></p>
</td>
</tr>
<tr>
<td height="19" width="187">
<p align="left"><font style="font-size: 10pt" face="Verdana">       ConnectionState.Broken</font></p>
</td>
<td height="19" width="74%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Bağlantı        hattı açıkken herhangibir nedenle bir kopma meydana gelmesi ve hattın        işlevselliğini kaybetmesi durumunda oluşur.</font></p>
</td>
</tr>
<tr>
<td height="19" width="187">
<p align="left"><font style="font-size: 10pt" face="Verdana">       ConnectionState.Executing</font></p>
</td>
<td height="19" width="74%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Bağlantı        nesnemiz bir komut çalıştırırken oluşur.</font></p>
</td>
</tr>
<tr>
<td height="19" width="187">
<p align="left"><font style="font-size: 10pt" face="Verdana">       ConnectionState.Fetching</font></p>
</td>
<td height="19" width="74%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Bağlantı        hattı üzerinden veriler alınırken bur değer geçerlidir.</font></p>
</td>
</tr>
</table>
<p></font></center></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Tablo 1.  ConnectionState numaralandırıcısının değerleri.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">ConnectionState  numaralandırıcısı aynı zamanda, State özelliği içinde kullanılabilir. State  özelliği, OleDbConnection nesnesinin o anki durumunu, ConnectionState  numaralandırıcısı tipinde saklar. State özelliğini uygulamalarımızda, var olan  bağlantının durumun kontrol ederek hareket etmek için kullanabiliriz. Örneğin  bir bağlantı nesnesini uygulamamızın bir yerinde tekrardan açmak istediğimizi  varsayalım. Bu bağlantı nesnesinin durumu zaten Open ise yani açık ise,  tekrardan açma işlemi uygulamamız gerekmez. Dilerseniz makalemizin sonunda  StateChange olayına ilişkin bir örnek geliştirelim.</font></font></p>
<table id="AutoNumber9" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 9pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">OleDbConnection      con;<font color="#0000ff"> </font></font><font color="#0000ff">     <font style="font-size: 10pt" color="#008000" face="Verdana">/*      OleDbConnection nesnemiz tanımlanıyor.*/</font></font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff" size="2"><font face="Verdana">private</font></font><font size="2"><font face="Verdana">     <font color="#0000ff">void</font> Form1_Load(<font color="#0000ff">object</font>      sender, System.EventArgs e)</font></font></p>
<p><font size="2"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">{</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          lstDurum.Items.Clear();</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          con=<font color="#0000ff">new</font> OleDbConnection(&#8221;Provider=SQLOLEDB;Data      source=localhost;initial catalog=Friends;Integrated Security=sspi&#8221;); </font>     <font color="#008000"><font face="Verdana">/* Bağlantı hattımız      oluşturuluyor. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          con.StateChange+=<font color="#0000ff">new</font>      StateChangeEventHandler(con_DurumDegisti); </font><font color="#008000">     <font face="Verdana">/* OleDbConnection nesnemiz için StateChange olayımız      ekleniyor. Olay meydana geldiğinde con_DurumDegisti isimli metod      çalıştırılıcak.*/</font></font></p>
<p><font face="Verdana"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">}</p>
<p></font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">private</font></font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      btnAc_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">{</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">         </font></font><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">if</font><font style="font-size: 10pt">(con.State==ConnectionState.Closed)     </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Kullanıcı açık olan bir      bağlantı üzerinden tekrar bu butona basarak bir bağlantı açmak isterse bunun      önüne geçmek için ilgili OleDbConnection nesnesinin durumuna bakıyoruz. Eğer      con nesnesi kapalı ise, açılabilmesini sağlıyoruz.*/</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          {</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">               con.Open(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Bağlantımız açılıyor. İşte      bu anda StateChange olayı çalıştırılır.*/</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          }</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">}</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">private</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      btnKapat_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">{</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">          if</font><font style="font-size: 10pt">(con.State==ConnectionState.Open)     </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Eğer açık bir bağlantı varsa      kapatma işlemini uyguluyoruz.*/</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          {</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">               con.Close(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Bağlantı kapanıyor.      StateChange olayı bir kez daha çalışır. */</font></font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          }</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">}</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">private</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      con_DurumDegisti(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender,StateChangeEventArgs e)</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">{</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          lstDurum.Items.Add(&#8221;Bağlantı durumu &#8220;+e.OriginalState.ToString()+&#8221; idi.&#8221;);     </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Bağlantımızın hangi halde      olduğunu alıyoruz.*/</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">          lstDurum.Items.Add(&#8221;Artık bağlantı durumu &#8220;+e.CurrentState.ToString());     </font><font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      Ve bağlantımızın yeni halini alıyoruz.*/</font></font></p>
<p><font style="font-size: 10pt" face="Verdana">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">}</font></p>
</td>
</tr>
</table>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk54_15.gif" border="0" height="216" width="288" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 14.  StateChange olayı.</font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/connection-baglanti-kavrami-ve-oledbconnection-sinifi.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>GetOleDbSchemaTable Metodu İle Veritabanı Nesnelerini Elde Etme</title>
		<link>http://www.netanlatim.com/getoledbschematable-metodu-ile-veritabani-nesnelerini-elde-etme.html</link>
		<comments>http://www.netanlatim.com/getoledbschematable-metodu-ile-veritabani-nesnelerini-elde-etme.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:55:06 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[Elde Etme]]></category>

		<category><![CDATA[GetOleDbSchemaTable Metodu]]></category>

		<category><![CDATA[uygulama]]></category>

		<category><![CDATA[Veritabanı Nesnelerini]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/getoledbschematable-metodu-ile-veritabani-nesnelerini-elde-etme.html</guid>
		<description><![CDATA[Bu makalemizde, OleDbConnection    sınıfına ati olan GetOleDbSchemaTable metodu sayesinde, Sql Veritabanımızdaki    varlıklara ait şema bilgilerini nasıl temin edebileceğimizi incelemeye çalışacağız.    Çoğu zaman programlarımızda, bağlandığımız veritabanında yer alan tabloların    (Tables), görünümlerin (Views), saklı yordamların (Stored Procedures) ve daha    pek çok veritabanı [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu makalemizde, OleDbConnection    sınıfına ati olan GetOleDbSchemaTable metodu sayesinde, Sql Veritabanımızdaki    varlıklara ait şema bilgilerini nasıl temin edebileceğimizi incelemeye çalışacağız.    Çoğu zaman programlarımızda, bağlandığımız veritabanında yer alan tabloların    (Tables), görünümlerin (Views), saklı yordamların (Stored Procedures) ve daha    pek çok veritabanı nesnesinin bir listesine sahip olmak isteriz. ADO.NET&#8217;te    yer alan OleDbConnection nesnesine ait GetOleDbSchemaTable metodunu kullanarak    bu istediğimiz sonuca varabiliriz.GetOleDbSchema metodu aşağıdaki prototipe    sahiptir. </font></font></p>
<p><span id="more-392"></span></p>
<table style="border-collapse: collapse" id="AutoNumber1" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" height="23" width="100%">
<tr>
<td height="20" width="100%">
<p align="left"><font style="font-size: 10pt" face="Verdana"><strong>public </strong> DataTable<strong> GetOleDbSchemaTable(</strong>Guid<strong> </strong><em>schema</em><strong>,</strong>object<strong>[] </strong><em>restrictions</em><strong>);</strong></font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Dikkat edecek  olursanız metodun geri dönüş değeri DataTable tipindedir. Metodun isminde Table  kullanılmasının nedenide zaten budur. Yani dönen şema bilgileri bir DataTable  nesnesine aktarılacaktır. Metod iki önemli parametreye sahiptir. İlk  parametremiz, OleDbSchemaGuid sınıfı türünden bir numaralandırıcı değeri  almaktadır. Bu parametreye vereceğimiz değer ile, veritabanından elde etmek  istediğimiz şema tipini belirleriz. Örneğin veritabanında yer alan tabloları  elde etmek için, OleDbSchemaGuid.Tables değerini veririz. Bunun yanında bu  parametreye verebileceğimiz başka önemli değerlerde şunlardır.</font></font></p>
<table id="AutoNumber2" border="1" cellpadding="5" cellspacing="1" height="160" width="100%">
<tr>
<td align="center" bgcolor="#ffcc66" height="39" width="223">
<p align="left">     <font style="font-size: 10pt; font-weight: 700" face="Verdana">     OleDbSchemaGuid  Özelliği</font></p>
</td>
<td align="center" bgcolor="#ffcc66" height="39" width="69%">
<p align="left">     <font style="font-size: 10pt; font-weight: 700" face="Verdana">Açıklaması</font></p>
</td>
</tr>
<tr>
<td align="left" height="14" width="223"><font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid .Columns</font></td>
<td align="left" height="14" width="69%"><font style="font-size: 10pt" face="Verdana">Tablo veya tablolara ait sütun      yapısını sağlar.</font></td>
</tr>
<tr>
<td align="left" height="28" width="223"><font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid .Procedures</font></td>
<td align="left" height="28" width="69%"><font style="font-size: 10pt" face="Verdana">OleDbConnection nesnesinin      bağlı olduğu veritabanında yer alan saklı yordamların listesini sağlar.</font></td>
</tr>
<tr>
<td align="left" height="28" width="223"><font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid .Views</font></td>
<td align="left" height="28" width="69%"><font style="font-size: 10pt" face="Verdana">OleDbConnection nesnesinin      bağlı olduğu veritabanında yer alan görünümlerin listesini sağlar.</font></td>
</tr>
<tr>
<td align="left" height="14" width="223"><font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid .Indexes</font></td>
<td align="left" height="14" width="69%"><font style="font-size: 10pt" face="Verdana">Belirtilen Catalog&#8217;da yer alan      indexlerin listesini sağlar.</font></td>
</tr>
<tr>
<td align="left" height="14" width="223"><font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid .Primary_Keys</font></td>
<td align="left" height="14" width="69%"><font style="font-size: 10pt" face="Verdana">Belirtilen tablo veya      tablolardaki birincil anahtarların listesini verir.</font></td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Tablo 1.  OleDbSchemaGuid Üyelerinin Bir Kısmı</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid  sınıfı yukarıdaki örnek üyelerinin yanısıra pek çok üyeye sahiptir. Bu üyeler  ile ilgili daha geniş bilgi için MSDN kaynaklarından faydalanmanızı tavsiye  ederim. GetOleDbSchemaTable metodumuz ikinci bir parametre daha almaktadır. Bu  parametre ile şema bilgisi üzerindeki sınırlamaları belirleriz. Bu sayede, ilk  parametrede istediğimiz schema bilgilerinin sadece belirli bir tablo içinmi,   yada veritabanının tamamı içinmi oluşturulacağına dair sonuçları elde etmiş  oluruz. Örneklerimizi incelediğimizde bu parametrelerin ne işe yaradıklarını  daha iyi anlayacağınızı düşünüyorum. Şimdi ilk örneğimizi geliştirelim. Basit  bir Console uygulaması olarak geliştireceğimiz bu örnekte, Sql sunucumuzda yer  alan, Friends isimli veritabanındaki tüm tabloların bir listesini elde edeceğiz.  İşte program kodlarımız.</font></font></p>
<table id="AutoNumber3" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System;</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">/* OleDb isim uzayını ve Data isim uzayını ekliyoruz. */</p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data; </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data.OleDb;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">namespace</font></font><font style="font-size: 10pt" face="Verdana">      GetOleDbSchemaTables1</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">{</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font style="font-size: 10pt" color="#0000ff" face="Verdana">          class</font><font style="font-size: 10pt" face="Verdana"> Class1</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">          {</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">              </font></font><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">static</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      Main(</font><font style="font-size: 10pt" color="#0000ff">string</font></font><font style="font-size: 10pt" face="Verdana">[]      args)</font></p>
<p><font style="font-size: 10pt"></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">               {</font></p>
<p></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                   </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* OleDbConnection nesnemizi      oluşturuyoruz. SQLOLEDB provider&#8217;ını kullanarak, Sql sunucumuzda yer alan      Friends isimli veritabanına bir bağlantı nesnesi tanımlıyoruz. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">                    OleDbConnection con=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      OleDbConnection(&#8221;provider=SQLOLEDB;data source=localhost;initial      catalog=Friends;Integrated Security=sspi&#8221;);</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">                    con.Open(); </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Bağlantımızı açıyoruz. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">                    DataTable tblTabloListesi; </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* GetOleDbSchemaTable      metodunun sonucunu tutacak DataTable nesnemizi tanımlıyoruz.*/</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">                    tblTabloListesi=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">);     </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* OleDbConnection nesnemizin,      GetOleDbSchemaTable metodunu çalıştırıyoruz ve elde edilen şema bilgisini      (ki bu örnekte Friends isimli veritabanındaki tüm tabloların listesini      alıyor.) alıyoruz ve DataTable nesnemizin bellete referans ettiği alana      aktarıyoruz.*/</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">                   </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">     foreach</font><font style="font-size: 10pt">(DataRow dr </font>     <font style="font-size: 10pt" color="#0000ff">in</font><font style="font-size: 10pt">      tblTabloListesi.Rows) </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* DataTable&#8217;ımız içindeki      satırlarda gezinebileceğimiz bir döngü oluşturuyoruz ve bu döngü içinde her      bir satırın TABLE_NAME alanının değerini, dolayısıyla Friends      veritabanındaki tablo adlarını ekrana yazdırıyoruz. */</font></font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                    {</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                         Console.WriteLine(dr[&#8221;TABLE_NAME&#8221;]);</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">                    }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">               }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi uygulamamızı  çalıştırdığımızda Friends isimli veritabanında yer alan tüm tabloların ekrana  yazıldığını görürsünüz.</font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk53_1.gif" border="0" height="439" width="293" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 1.  Friends veritabanındaki tabloların listesi.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi  kodlarımızdaki blTabloListesi=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">);  satırını daha yakından incelemeye çalışalım. İlk parametremiz </font></font> <font style="font-size: 10pt" face="Verdana">OleDbSchemaGuid.Tables, con isimli  OleDbConnection nesnemizin bağlandığı Sql sunucusundaki Friends veritabanından  sadece tablo bilgilerini elde etmek istediğimizi göstermektedir. Sınırlandırıcı  özelliğe sahip olan ikinci parametremize null değerini vererek tüm tabloların  şemaya dahil edilmesini ve DataTable nesnesine aktarılmasını sağlamış olduk. Bu  noktada bu iki parametrenin birbirleri ile ilişkil olduklarını söyleyebiliriz.  Çünkü, OleDbSchemaGuid parametresinin vereceği tabloların şema yapısı, ikinci  parametreye bağlıdır. Şöyleki;</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table id="AutoNumber7" border="1" cellpadding="5" cellspacing="1" height="106" width="100%">
<tr>
<td align="center" bgcolor="#ffcc66" height="31" width="112">
<p align="left">       <font style="font-size: 10pt; font-weight: 700" face="Verdana">Sınırlama        Alanı</font></p>
</td>
<td align="center" bgcolor="#ffcc66" height="31" width="84%">
<p align="left">       <font style="font-size: 10pt; font-weight: 700" face="Verdana">Açıklaması</font></p>
</td>
</tr>
<tr>
<td height="14" width="112">
<p align="left"><font style="font-size: 10pt" face="Verdana">TABLE_CATALOG</font></p>
</td>
<td height="14" width="84%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Katalog adı.        Eğer provider&#8217;ımız katalogları desteklemiyorsa null değeri verilir.</font></p>
</td>
</tr>
<tr>
<td height="14" width="112">
<p align="left"><font style="font-size: 10pt" face="Verdana">TABLE_SCHEMA</font></p>
</td>
<td height="14" width="84%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Şema adı.        Yine provider&#8217;ımız şemaları desteklemiyorsa null değeri verilir.</font></p>
</td>
</tr>
<tr>
<td height="14" width="112">
<p align="left"><font style="font-size: 10pt" face="Verdana">TABLE_NAME</font></p>
</td>
<td height="14" width="84%">
<p align="left"><font style="font-size: 10pt" face="Verdana">Belirli bir        tabloya ait şema bilgileri kullanılacaksa, örneğin bu tabloya ait sütun        bilgileri alınıcaksa kullanılır.</font></p>
</td>
</tr>
<tr>
<td height="14" width="112">
<p align="left"><font style="font-size: 10pt" face="Verdana">TABLE_TYPE</font></p>
</td>
<td height="14" width="84%">
<p align="left"><font style="font-size: 10pt" face="Verdana">       Veritabanından hangi tipteki tabloları alacağımızı belirtmek için        kullanılır.</font></p>
</td>
</tr>
</table>
<p></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Tablo 2.  OleDbSchemaGuid.Tables İçin Sınırlama Parametresi Elemanları</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Ancak farzedelimki  sadece kullanıcı tanımlı taboların listesine ihtiyacımız var. İşte bu durumda  sınırlandırıcı parametremiz devreye girecek. Bunun için, sınırlandırıcı  parametremizin son elemanının değerini belirlememiz yeterli olucak. O halde bu  işlemi nasıl gerçekleştirebiliriz? Bunun için uygulamamızın kodlarını aşağıdaki  şekilde değiştirmemiz yeterlidir.</font></font></p>
<table id="AutoNumber4" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">object</font></font><font style="font-size: 10pt" face="Verdana">[]      objSinirlama;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">objSinirlama=</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">object</font><font style="font-size: 10pt">[]{</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">,</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">,</font><font style="font-size: 10pt" color="#0000ff">null</font></font><font style="font-size: 10pt" face="Verdana">,&#8221;TABLE&#8221;};</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     tblTabloListesi=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,      objSinirlama);</font></p>
</td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk53_2.gif" border="0" height="175" width="325" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 2. Sadece  Kullanıcı Tanımlı Tabloların Listesi</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Burada  sınırlandırıcı nesnemizin nasıl tanımlandığına dikkat edin. Bu tanımlama biraz  karışık gelebilir. Ancak OleDbSchemaGuid</font><font style="font-size: 10pt; font-weight: 700" face="Verdana">  </font><font style="font-size: 10pt" face="Verdana">özelliğinin aldığı değere  göre şema bilgileri üzerinde bir sınırlama koymak istiyorsak, bu üyenin  kullanabileceği değerleri bilmemiz gerekir. Burada object dizimizin son elemanın  TABLE değeri atanmıştır. TABLE değeri şema bilgisine sadece kullanıcı tarafından  tanımlanmış taboların alınacağını belirtir. Diğer yandan bu dördüncü elemana,  ALIAS, SYSTEM TABLE, VIEW, SYSTEM VIEW, SYNONYM, TEMPORARY, LOCAL TEMPORARY  değerlerinide verebiliriz. Hepsi, OleDbSchemaGuid.Tables</font><font style="font-size: 10pt; font-weight: 700" face="Verdana"> </font><font style="font-size: 10pt" face="Verdana">parametresi sonucunda  oluşturulacak tablo şema bilgilerinin yapısınıda değiştirecektir. Örneğin,  SYSTEM TABLE değerini vermemiz halinde, Friends tablosundaki system tablolarının  listesini elde etmiş oluruz. Yada VIEW değerini verdiğimizde kullanıcı tanımlı  görünüm nesnelerinin listesini elde etmiş olurduk. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Yukarıdaki  örneğimizde, veritabanımızda yer alan tablolara ait schema bilgilerini aldık.  Şimdi ise belirli bir tablonun sütun bilgilerini almak istediğimizi farzedelim.  Burada sütun bilgileri için,  OleDbSchemaGuid.Columns parametresini  kullanmamız gerekiyor. Bu durumda sınırlandırıcımızıda bu parametreye göre  değiştirmek durumundayız. Eğer ilk örneğimizdeki gibi null değerini verirsek  veritabanındaki tüm tabloların kolonlarına ait şema bilgilerini elde etmiş  oluruz. Oysaki belirli bir tabloya ait alanlar için şema bilgisi  alıcaksak,OleDbSchemaGuid.Columns parametresinin sınırlandırıcı koşullarını  değiştirmemiz gerekecektir. İşte bu noktada sınırlandırıcı değişkenimizin üçüncü  elemanı olan TABLE_NAME elemanını kullanırız. Bu amaçla kodlarımızı aşağıdaki  şekilde değiştirmemiz yeterli olucaktır.</font></font></p>
<table id="AutoNumber5" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">object</font></font><font style="font-size: 10pt" face="Verdana">[]      objSinirlama;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">objSinirlama=</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">object</font><font style="font-size: 10pt">[]{</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">,</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">,&#8221;Kitap&#8221;,</font><font style="font-size: 10pt" color="#0000ff">null</font></font><font style="font-size: 10pt" face="Verdana">};</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     tblTabloListesi=con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,      objSinirlama); </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* OleDbConnection nesnemizin,      GetOleDbSchemaTable metodunu çalıştırıyoruz. Bu kez, Columns değeri      sayesinde, sınırlama nesnemizin üçüncü elemanında belirttiğimiz tablo adına      ait alanların listesini elde ediyoruz. */</font></font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">foreach</font><font style="font-size: 10pt">(DataRow      dr </font><font style="font-size: 10pt" color="#0000ff">in</font></font><font style="font-size: 10pt" face="Verdana">      tblTabloListesi.Rows) </font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(dr[&#8221;COLUMN_NAME&#8221;]); </font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk53_3.gif" border="0" height="187" width="269" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 3.  Tablomuza ait alanların adları.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Böylece Kitap  isimli tablomuzun alanlarına ait schema bilgilerini elde etmiş olduk. Bu örnekte  ve bir önceki örnekte dikkat ederseniz, DataTable nesnesindeki belirli bir  alanın değerini ekrana yazdırdık. Bu örnekte, COLUMN_NAME, önceki örnekte ise,  TABLE_NAME. Elbette elde ettiğimiz şema bilgilerinde sadece bu alanlar yer  almıyor. Örneğin Friends veritabanındaki kullanıcı tanımlı tablolara ait başka  ne tür bilgilerin şemaya alındığına bir bakalım. Bu amaçla, DataTable nesnemize  aktarılan şema bilgilerine ait satırlardaki tüm alanları bir döngü ile gezmemiz  yeterli olucaktır. Bunu aşağıdaki kodlar ile gerçekleştirebiliriz.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber6" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<p style="margin-top: 3px; margin-bottom: 3px" align="left">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">object</font></font><font style="font-size: 10pt" face="Verdana">[]      objSinirlama;</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">objSinirlama=</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">object</font><font style="font-size: 10pt">[]{</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">,</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">,</font><font style="font-size: 10pt" color="#0000ff">null</font></font><font style="font-size: 10pt" face="Verdana">,&#8221;TABLE&#8221;};</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">     tblTabloListesi=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,      objSinirlama); </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">foreach</font><font style="font-size: 10pt">(DataRow      dr </font><font style="font-size: 10pt" color="#0000ff">in</font></font><font style="font-size: 10pt" face="Verdana">      tblTabloListesi.Rows) </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt" face="Verdana">{</font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">          for</font><font style="font-size: 10pt">(</font><font style="font-size: 10pt" color="#0000ff">int</font></font><font style="font-size: 10pt" face="Verdana">      i=0;i&lt;=tblTabloListesi.Rows.Count;++i)</font></p>
<p><font style="font-size: 10pt">     </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          {</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">               Console.Write(dr[i]); </font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">               Console.Write(&#8221;&#8212;&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          }</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">          Console.WriteLine(&#8221;");</font></font></p>
<p><font style="font-size: 10pt">    </font></p>
<p style="margin-top: 3px; margin-bottom: 3px" align="left"><font style="font-size: 10pt"><font face="Verdana">}</font></font></p>
</td>
</tr>
</table>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk53_4.gif" border="0" height="151" width="645" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 4.  Şemadaki diğer bilgiler.</font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/getoledbschematable-metodu-ile-veritabani-nesnelerini-elde-etme.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Data Form Wizard Yardımıyla İlişkili Tablo Uygulamalarının Hazırlanması</title>
		<link>http://www.netanlatim.com/data-form-wizard-yardimiyla-iliskili-tablo-uygulamalarinin-hazirlanmasi.html</link>
		<comments>http://www.netanlatim.com/data-form-wizard-yardimiyla-iliskili-tablo-uygulamalarinin-hazirlanmasi.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:51:17 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[Data Form Wizard]]></category>

		<category><![CDATA[İlişkili Tablo Uygulamaları]]></category>

		<category><![CDATA[İlişkili Tablo Uygulamalarının Hazırlanması]]></category>

		<category><![CDATA[Yardımla]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/data-form-wizard-yardimiyla-iliskili-tablo-uygulamalarinin-hazirlanmasi.html</guid>
		<description><![CDATA[Bu makalemizde, Visual  				StudioNET ortamında, Data Form Wizard yardımıyla, veritabanı uygulamalarının ne  				kadar kolay bir şekilde oluşturulabileceğini inceleyeceğiz. Pek çok programcı,  				uygulamalarını geliştirirken sihirbazları kullanmaktan açıkça kaçınır. Bunun  				bir nedeni, sihirbazların işlemleri çok fazla kolaylaştırması ve programcıyı  				tembelliğe itmesidir. Gerçektende, bir Data Form Wizard yardımıyla uzun sürede  				programlayacağınız bir [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu makalemizde, Visual  				StudioNET ortamında, Data Form Wizard yardımıyla, veritabanı uygulamalarının ne  				kadar kolay bir şekilde oluşturulabileceğini inceleyeceğiz. Pek çok programcı,  				uygulamalarını geliştirirken sihirbazları kullanmaktan açıkça kaçınır. Bunun  				bir nedeni, sihirbazların işlemleri çok fazla kolaylaştırması ve programcıyı  				tembelliğe itmesidir. Gerçektende, bir Data Form Wizard yardımıyla uzun sürede  				programlayacağınız bir veritabanı uygulamsını inanılmaz kısa sürede  				tamamlayabilirisiniz. Diğer yandan, bir programcı için bir uygulamayı  				geliştirmekteki en önemli unsur belkide şu kelimenin arkasında gizlidir;  				Kontrol.</font></font></p>
<p><span id="more-391"></span><br />
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Kontrol bir programcı  				için, uygulamanın her yerinde hakim olmak demektir. Yazılabilecek her kodun  				programcı tarafından yazılması, olabilecek tüm hataların düzeltilmesi,  				mantıksal bütünlüklerin sağlanması ve kullanıcının ihtiyaçlarına en üst düzeyde  				cevap verilebilmesi, programcının kontrolünü güçlendiren unsurlar arasında yer  				alır. Gerçektende ben size, gerçek hayatta sihirbazları çok fazla  				kullanmamanızı tavsiye ederim. Herşeyden önce, sihirbazlar tek düzelik  				sağlarlar ve sürekli aynı adımları atarlar. Bu bir süre sonra hem sizi  				tembelleştirecek hemde gerçek bir programcı gibi düşünmekten örneğin  				oluşabilecek programatik hataların önceden sezilebilmesi yetenğinden mahrum  				bırakacaktır.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Ancak tüm bu  				olumsuzlukların yanında, bir  Data Form Wizard aracını kullanaraktan, .NET  				ortamında veritabanı programlamasını öğrenmeye çalışan bir programcı için,  				neler yapılabileceği? , bunların hangi temel adımlarla gerçekleştirildiği? ,  				hatta Visual Studio.NET tarafından otomatik olarak oluşturulan kodların  				nerelerde devreye girdiği? gibi sorunların anlaşılmasıda oldukça kolay  				olucaktır. Diğer yandan profesyonel programcılarda zaman zaman, sadece  				kendileri için bir takım verileri kolayca izleyebilmek amacıyla yada ani  				müdahalelerde bulunmak amacıyla oluşturacakları uygulamalarda aynı kodları  				tekrardan yazmak yerine sihirbazları kullanmayı tercih edebilirler. Dolayısıyla  				zaman zaman sihirbazları kullanmak oldukça işe yarayabilir ama bunu alışkanlık  				halinede getirmemek gerekir. İşte bu makalemizde, bir Ado.Net uygulamasının,  				ilişkili iki tablo için nasıl kolayca oluşturulabileceğini incelyeceğiz.  				Uygulamamız sona erdiğinde, tabloları izleyebilecek, ilişkili kayıtları  				inceleyebilecek, yeni kayıtlar ekleyebilecek, var olanları düzenleyip  				silebilecek ve kayıtlar arasında gezinebileceğiz. Ayrıca sihirbazımız,  				programatik olarak oluşturulan Ado.Net uygulamalarında da hangi adımları takip  				edeceğimiz hakkında bize kılavuzluk etmiş olucak. Şimdi dilerseniz uygulamamızı  				yazmaya başlayalım. Öncelikle Visual Studio ortamında bir C# Windows Uygulaması  				açalım. Daha sonra veritabanı uygulamamızı taşıyacak formu eklemek için,  				Solution sekmesinde, projemize sağ tuş ile tıklayalım ve Add New Item öğesini  				seçelim.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_1.gif" border="0" height="363" width="372" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 1. Add New Item.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu durumda karşımıza  				aşağıdaki pencere gelecektir. Bu pencerede Data Form Wizard aracını seçelim.  				Data Form Wizard aracı tüm adımları bitirildikten sonra, projemize cs uzantılı  				bir sınıf ve bu sınıfı kullanan bir Form ekleyecektir. Veritabanına  				bağlanılması, tabloların dolduruluması, satırlar arasında gezinme gibi pek çok  				işlevi yerine getiren metodlar, özellikler ve nesneler, Data Form Wizard ile  				oluşturulan bu sınıf içerisine yazılacaktır. Burada Form dosyanıza anlamlı bir  				isim vermenizi öneririm.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_2.gif" border="0" height="399" width="531" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 2. Data Form Wizard </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bundan sonra, artık  				uygulamayı oluşturacağımız adımlara geçmiş oluruz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_3.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 3. Adımlara  				başlıyoruz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">İlk adımımız DataSet  				nesnemizin isimlendirilmesi. Bir DataSet, veritabanından bağımsız olarak  				uygulamanın çalıştığı sistemin belleğinde oluşturulan bir alana referans eden  				kuvvetli bir nesnedir. Bir DataSet içersine, tablolar, tablolar arası ilişkiler  				vb. ekleyebiliriz. Bir DataSet ile,  veritabanındanki gerekli veriler  				DataSet nesnesinin bellekte temsil ettiği bölgeye yüklendikten sonra bu  				veritabanına bağlı olmaksızın çalışabiliriz. Dahada önemlisi, veritabanına  				bağlı olmaksızın, veriler ekleyebilir, verileri düzenleyebilir, silebilir, yeni  				tablolara, görünümler, ilişkiler oluşturabiliriz. DataSet, ADO.NET &#8216;in en  				önemli yeniliklerinden birisi olmakla birlikte, bağlantısız katman dediğimiz  				kısımın bir parçasıdır. DataSet&#8217;i ilerleyen makalelerimizde daha detaylı olarak  				da inceleyeceğiz. Şu an için bilmeniz gereken, oluşturacağımız DataSet&#8217;in Sql  				sunucumuzda (veya başka bir databasede) yer alan ilişkili tablolarımızı ve  				aralarındaki ilişkiyi içerecek olan bağlantısız ( ADO&#8217; daki RecordSet gibi,  				Veritabanına sürekli bir bağlantıyı gerektirmeyen ) bir nesne oluşudur. Şimdi  				burada uygulamaya önceden eklediğimiz bir DataSet nesnesini seçebileceğimiz  				gibi yeni bir tanede oluşturabiliriz. Biz yeni bir DataSet oluşturacağımızdan,  				Creat a new database named alanına, DataSet&#8217;imizin adını giriyoruz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_4.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 4. İlk adımımız  				DataSet nesnemizi belirleyeceğimiz ad ile oluşturmak.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Sıradaki adım,  				veritabanına olan bağlantımızı gerçekleştirecek nesnemizi tanımlayacak.  				Herşeyden önce DataSet nesnemize bir veritabanından veriler yükleyeceksek, bir  				veri sağlayıcısı üzerinden bu verileri çekmemiz gerekecektir. İşte bu amaçla,  				pek çok ADO.NET nesnesi için gerekli olan ve belirtilen veri sağlayıcısı  				üzerinden ilgili veri kaynağına bir bağlantı açmamıza yarayan bir bağlantı (  				Connection ) nesnesi kullanacağız. Burada uygulamamızda Sql Sunucumuzda yer  				alan veritabanına OleDb üzerinden erişmek istediğimiz için, sihirbazımız bize  				bir OleDbConnection nesnesi örneği oluşturacaktır. Veri sağlayıcısının tipine  				göre, OleDbConnection, SqlConnection, OracleConnection, OdbcConnection bağlantı  				nesnelerini oluşturabiliriz. New Connection seçeneğini seçerek yeni bir  				bağlantı oluşturmamızı sağlayacak diğer bir sihirbaza geçiş yapıyoruz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_5.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 5. Connection  				nesnemizi oluşturmaya başlıyoruz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi karşımızda Data Link  				Properties penceresi yer almakta. Burada, Provider kısmında Microsoft OLE DB  				Provider For Sql Server seçeneği seçili olmalıdır. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_6.gif" border="0" height="467" width="367" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 6. Provider.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Connection sekmesinde ise  				öncelikle bağlanmak istediğimiz sql sunucusunun adını girmeliyiz. Sql sunucumuz  				bu uygulamada, istemci bilgisayar üzerinde kurulu olduğundan buraya localhost  				yazabiliriz. 2nci seçenekte, sql sunucusuna log in olmamız için gerekli  				bilgileri veriyoruz. Eğer sql sunucumuz windows authentication&#8217;ı kullanıyorsa,  				Use Windows Integrated Security seçeneğini seçebiliriz. Bu durumda sql  				sunucusuna bağlanmak için windows kullanıcı bilgileri kontrol edilecektir.  				Bunun sonucu olarak username ve password kutucukları geçersiz  				kılınıcakatır.  Diğer yandan sql sunucusuna, burada oluşturulmuş bir sql  				kullanıcı hesabı ilede erişebiliriz. Ben uygulamamda sa kullanıcısını  				kullandım. Bildiğiniz gibi sa sql kullanıcısı admin yetkilerine sahip bir  				kullanıcı olarak sql sunucusunun kurulması ile birlikte sisteme default olarak  				yüklenir. Ancak ilk yüklemede herhangibir şifresi yoktur. Güvenlik amacıyla bu  				kullanıcıya mutlaka bir şifre verin.(Bunu sql ortamında gerçekleştireceksiniz.)  				Allow Saving Password seçeneğini işaretlemediğimiz takdirde, uygulamayı kim  				kullanıyor ise, uygulama başlatıldığında sql sunucusuna bağlanabilmek için  				kendisinden bu kulllanıcı adına istinaden şifre sorulacaktır. Eğer bu seçeneği  				işaretlersek, program çalıştırıldığında buraya girilen şifre sorulmayacaktır.  				Şimdi 3nci seçeneğe geçersek ve combo box kontrolünü açarsak sql sunucusunda  				yer alan veritabanlarının tümünü görebiliriz. Buradan kullanacağımız  				veritabanını seçeceğiz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_7.gif" border="0" height="467" width="367" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 7. Connection  				bilgileri giriliyor.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Dilersek Test Connection  				butonuna tıklayarak, sql sunucusuna bağlanıp bağlanamadığımızı kontrolde  				edebiliriz. Şimdi OK diyelim ve Data Link Properties penceresini kapatalım. Bu  				durumda karşımıza bir Login penceresi çıkacaktır. Bu az önce Allow Saving  				Password seçeneğini işaretlemediğimiz için karşımıza gelmiştir. Şifremizi  				tekrardan girerek bu adımı geçiyoruz. Bu durumda, sql sunucumuz için gerekli  				bağlantıyı sağlıyacak connection nesnemizde oluşturulmuş olur.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_8.gif" border="0" height="165" width="359" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 8. Login penceresi.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Sıradaki adımımızda ise,  				uygulamamızda kullanacağımız tabloları seçeceğiz. Bu adımda, bağlandığımız  				veritabanında yer alan tablolar ve görünümler yer almaktadır. Biz hemen  				ekleyeceğimiz iki tabloyu seçip pencerenin sağ tarafında yer alan Seleceted  				Item(s) kısmına aktarıyoruz. Bu tabloların her biri birer DataTable nesnesi  				olucak şekilde DataSet nesnemize eklenir. DataTable nesneleri tablolara ait  				bilgilerinin ve verilerinin bellekte yüklendiği belli bir alanı referans  				ederler. Bir DataSet nesnesi birden fazla DataTable içerebilir. Böylece  				veritabanı ortamını DataSet nesnesi ile uygulamanın çalıştığı sistem belleğinde  				simule etmiş oluruz. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_9.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 9. Tablolar  				seçiliyor.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu iki tablomuz hakkında  				yeri gelmişken kısaca bilgi verelim. Sepetler tablosunda alışveriş sepetlerine  				ait bilgiler yer alıyor. Siparsler tablosu ise bu belirli sepetin içinde yer  				alan ürünlerin listesini tutuyor. Yani Sepetler tablosundan Siparisler  				tablosuna doğru bire-çok ilişki söz konusu. Bu adımıda tamamladıktan sonra,  				veri kaynağına log in olmamız için tekrar bir şifre ekranı ile karşılacağız.  				Burayıda geçtikten sonra sıra, iki tablo arasındaki ilişkiyi kuracağımız adıma  				geldi. Burada aralarında ilişki oluşturmak istediğimiz tabloları ve ilgili  				kolonları seçerek ilişkimiz için bir isim belirleyeceğiz. Bunun sonucu olarak  				sihirbazımız bir DataRelation nesnesi oluşturacak ve bu nesneyi DataSet&#8217;e  				ekliyecek. Böylece veritabanından bağımsız olarak çalışırken, DataSet kümemiz  				bu DataRelation nesnesini kullanarak tablolar arasındaki bütünlüğüde sağlamış  				olucak. Öncelikle bu ilişki için anlmalı bir ad belirleyin. Çoğunlukla  				ilişkinin hangi taboladan hangi tabloya doğru olduğuna bağlı olunarak bir  				isimlendirme yapılır. Daha sonra Parent(Master) tablo ve Primary Key seçilir.  				Ardından Foreign Key alanını içeren tabloda, Child(Detail) tablo olarak  				seçilir. Uyulamamızda Sepetler tablosu ile Siparisler tablosu SepetID alanları  				ile birbirlerine ilişkilendirilmiştir. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_10.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 10. DataRelation  				nesnesi oluşturuluyor.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bir sonraki adımımızda  				tabloların hangi alanlarının Form üzerinde görüntüleneceğini belirleriz.  				Başlangıç için bütün alanlar seçili haldedir. Bizde bunu uygulamamızda bu halde  				bırakacağız.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_11.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 11. Görüntülenecek  				Alanların Seçilmesi.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Son adım ise, Formun  				tasarımının nasıl olacağıdır. İstersek master tabloyu DataGrid kontrolü içinde  				gösterebiliriz. Ya da Master tabloya ait verileri bağlanmış kontollerlede  				gösterebiliriz. Bunun için Single record in individual controls seçeneğini  				seçelim. Diğer seçenekleride olduğu gibi bırakalım.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_12.gif" border="0" height="451" width="500" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 12. Son Adım. Formun  				görüntüsünün ayarlanması.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Böylece Data Form Wizard  				yardımıyla veritabanı uygulamamız için gerekli formu oluşturmuş olduk.  				Karşımıza aşağıdaki gibi bir Form çıkacaktır.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_13.gif" border="0" height="466" width="545" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 13. Formun son hali.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi tüm  				kontrolleri ile birlikte uygulamamız oluşturulmuştur. Sql sunucumuza Ole Db  				veri sağlayıcısı üzerinden erişmemizi sağlıyan OleDbConnection nesnemiz,  				tablolardaki verileri DataSet nesnesine yüklemek (Fill) ve bu tablolardaki  				değişiklikleri, veritabanına yansıtmak (update) için kullanılan  				OleDbDataAdapter nesneleri, tabloları ve tablolar arası ilişkiyi bellekte  				sakayıp veritabanından bağımsız olarak çalışmamızı sağlayan DataSet nesnemiz ve  				diğerleri&#8230; Hepsi sihirbazımız sayesinde kolayca oluşturulmuştur. Gelelim bu  				form ile neler yapabileceğimize.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Her şeyden önce  				uygulamamızı çalıştırdığımızda hiç bir kontrolde verilerin görünmediğine şahit  				olucaksınız. Önce, veritabanından ilgili tablolara ait verilerin DataSet  				üzerinden DataTable nesnelerine yüklenmesi gerekir. Bu Fill olarak tanımlanan  				bir işlemdir. Load butonu bu işlemi gerçekleştirir. Load başlıklı butonun  				koduna bakarasak;</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table id="AutoNumber1" style="border-collapse: collapse" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font color="#0000ff"> 						</font></p>
<p align="left"><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">private</font> 					</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff"> 							void</font><font style="font-size: 10pt"> btnLoad_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana"> 						sender, System.EventArgs e)</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">{</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							try</font><font style="font-size: 10pt" face="Verdana"> </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     {</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Attempt to load the dataset.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">         						</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">this</font><font style="font-size: 10pt" face="Verdana">.LoadDataSet();</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     }</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							catch</font><font style="font-size: 10pt" face="Verdana"> (System.Exception  							eLoad) </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     {</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Add your error handling code here.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#008000" face="Verdana">          						// Display error message, if any.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana"> </font><font style="font-size: 10pt"></p>
<p align="left"><font face="Verdana">          								System.Windows.Forms.MessageBox.Show(eLoad.Message);</font></p>
<p align="left"><font face="Verdana">     }</font></p>
<p></font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							this</font><font style="font-size: 10pt" face="Verdana">.objdsSatislar_PositionChanged();</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">}</font></p>
</td>
</tr>
</table>
<p></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi kod  				LoadDataSet adlı bir procedure&#8217;e yönlendirilir.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table id="AutoNumber2" style="border-collapse: collapse" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font color="#0000ff"> 						</font></p>
<p align="left"><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">public</font> 					</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff"> 							void</font></font><font style="font-size: 10pt" face="Verdana"> LoadDataSet()</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">{</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">      						// Create a new dataset to hold the records returned from the call to  						FillDataSet.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#008000" face="Verdana">      						// A temporary dataset is used because filling the existing dataset would</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana"> </font> 					<font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#008000" face="Verdana">      						// require the databindings to be rebound.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana"> </font><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     Wizard.dsSatislar  								objDataSetTemp;</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     objDataSetTemp = </font> 					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana"> 						Wizard.dsSatislar();</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     </font> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">try</font><font style="font-size: 10pt" face="Verdana"> 						</font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     {</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">         </font> 					</font><font color="#008000"><font style="font-size: 10pt" face="Verdana">// Attempt to  							fill the temporary dataset.</font></font></p>
<p><font color="#008000"> </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">       <span style="background-color: #ffcc66">      </span> 						</font><font style="font-size: 10pt; background-color: #ffcc66" color="#0000ff" face="Verdana"> 							this</font><font style="font-size: 10pt" face="Verdana"><span style="background-color: #ffcc66">.FillDataSet(objDataSetTemp);</span></font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     }</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							catch</font><font style="font-size: 10pt" face="Verdana"> (System.Exception  							eFillDataSet) </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     {</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Add your error handling code here.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">          						throw</font><font style="font-size: 10pt" face="Verdana"> eFillDataSet;</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     }</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							try</font><font style="font-size: 10pt" face="Verdana"> </font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     {</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">          								grdSiparisler.DataSource = </font> 					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">null</font><font style="font-size: 10pt" face="Verdana">;</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Empty the old records from the dataset.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">          							objdsSatislar.Clear();</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Merge the records into the main dataset.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font style="font-size: 10pt"></p>
<p align="left"><font face="Verdana">          								objdsSatislar.Merge(objDataSetTemp);</font></p>
<p align="left"><font face="Verdana">          								grdSiparisler.SetDataBinding(objdsSatislar, &#8220;Sepetler.drSepetlerToSiparisler&#8221;);</font></p>
<p align="left"><font face="Verdana">     }</font></p>
<p></font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							catch</font><font style="font-size: 10pt" face="Verdana"> (System.Exception  							eLoadMerge) </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     {</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Add your error handling code here.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">          						throw</font><font style="font-size: 10pt" face="Verdana"> eLoadMerge;</font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     }</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">}</font> 					</font></p>
</td>
</tr>
</table>
<p></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu metodda da yükleme  				işlemi için bir DataSet nesnesi oluşturulur veFillDataSet procedure&#8217;ü bu  				DataSet&#8217;i parametre alarak çağırılır. Bu kodlarda ise OleDbDataAdapter  				nesnelerinin Fill metodlarıa tablolara ait verileri, veritabanından alarak  				DataTable nesnelerine yüklerler. Bunu yaparken OleDbDataAdapter nesneleri  				Select sorgularını kullanır. Bu sorgular, program içinde oluşturulmuş  				SqlCommand nesnelerinde saklanmaktadır. Her bir tablo için bir  				OleDbDataAdapter, bu tabodaki verileri almak için çalıştıracağı bir Sql  				sorgusunu, bir SqlCommand nesnesinden alır. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table style="border-collapse: collapse" id="AutoNumber3" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font color="#0000ff"> 						</font></p>
<p align="left"><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">public</font> 					</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff"> 							void</font></font><font style="font-size: 10pt" face="Verdana"> FillDataSet(Wizard.dsSatislar  						dataSet)</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">{</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">      						// Turn off constraint checking before the dataset is filled.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#008000" face="Verdana">      						// This allows the adapters to fill the dataset without concern</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana"> </font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#008000" face="Verdana">      						// for dependencies between the tables.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana"> </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">      							dataSet.EnforceConstraints = </font><font style="font-size: 10pt" color="#0000ff" face="Verdana"> 							false</font><font style="font-size: 10pt" face="Verdana">;</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">      							try</font><font style="font-size: 10pt" face="Verdana"> </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">     {</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#008000" face="Verdana">          						// Open the connection.</font></p>
<p><font style="font-size: 10pt" color="#008000" face="Verdana">					</font><font size="2"> 						</font></p>
<p align="left"> <font size="2">					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">          						this</font><font style="font-size: 10pt" face="Verdana">.oleDbConnection1.Open();</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">         						</font><font color="#008000"><font style="font-size: 10pt" face="Verdana">// Attempt to  								fill the dataset through the OleDbDataAdapter1.</font></font></p>
<p><font color="#008000">					</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">         						</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">this</font><font style="font-size: 10pt" face="Verdana">.oleDbDataAdapter1.Fill(dataSet);</font></p>
<p align="left"> 						<font style="font-size: 10pt" color="#0000ff" face="Verdana">          							this</font><font style="font-size: 10pt" face="Verdana">.oleDbDataAdapter2.Fill(dataSet);</font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     }</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     </font> 					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">catch</font><font style="font-size: 10pt" face="Verdana"> 						(System.Exception fillException) </font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     {</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">         </font> 					</font><font color="#008000"><font style="font-size: 10pt" face="Verdana">// Add your  							error handling code here.</font></font></p>
<p><font color="#008000"> </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">         						</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">throw</font><font style="font-size: 10pt" face="Verdana"> 							fillException;</font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     }</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     </font> 					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">finally</font><font style="font-size: 10pt" face="Verdana"> 					</font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     {</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">         </font> 					</font><font color="#008000"><font style="font-size: 10pt" face="Verdana">// Turn  							constraint checking back on.</font></font></p>
<p><font color="#008000"> </font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">          							dataSet.EnforceConstraints = </font><font style="font-size: 10pt" color="#0000ff" face="Verdana"> 							true</font><font style="font-size: 10pt" face="Verdana">;</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">         						</font><font color="#008000"><font style="font-size: 10pt" face="Verdana">// Close the  								connection whether or not the exception was thrown.</font></font></p>
<p><font color="#008000">					</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">         						</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">this</font><font style="font-size: 10pt" face="Verdana">.oleDbConnection1.Close();</font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     }</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">}</font> 					</font></p>
</td>
</tr>
</table>
<p></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Uygulamanın diğer  				butonlarına ilişkin kodlarıda incelediğinizde herşeyin otomatik olarak sihirbaz  				tarafından uygulandığını göreceksiniz. Uygulamanın tüm kodlarını ekteki <a href="http://www.csharpnedir.com/DataForm1.cs"> 					DataForm1.cs</a> dosyası içinden inceleyebilirsiniz. Şimdi uygulamamızı  				çalıştıralım ve görelim. Uygulamayı çalıştırdığınızda Form1&#8242;in ekrana geldiğini  				ve DataForm1 in görünmediğini göreceksiniz. Bu durumu düzeltmek için, projenin  				başlangıç formunu değiştirmemiz gerekiyor.Bunun için, Form1&#8242;in Main  				Procedure&#8217;ünün kodunu aşağıdaki gibi değiştirmemiz yeterlidir.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table style="border-collapse: collapse" id="AutoNumber4" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font color="#0000ff"> 						</font></p>
<p align="left"><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">static</font> 					</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff"> 							void</font></font><font style="font-size: 10pt" face="Verdana"> Main() </font></p>
<p><font style="font-size: 10pt"> 						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">						</font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">     Application.Run(</font> 					</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana"> 						DataForm1());</font></p>
<p align="left"><font style="font-size: 10pt" face="Verdana">}</font></p>
</td>
</tr>
</table>
<p></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi uygulamamızı  				çalıştırabiliriz. Load başlıklı button kontrolüne tıkladığımızda tablo  				verilerinin ekrana geldiğini ve kontrollere yüklendiğini göreceksiniz. Yön  				kontrolleri ile Sepetler tablosunda gezinirken DataGrid kontrolündeki  				verilerinde değiştiğine dikkatinizi çekmek isterim. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_14.gif" border="0" height="510" width="450" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 14.Uygulamanın  				çalışmasının sonucu.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Dilerseniz veriler  				üzerinde değişiklikler yapabilirsiniz. Ancak yaptığınız bu değişiklilker  				bellekteki DataSet kümesi üzerinde gerçekleşecektir. Bu değişiklikleri eğer,  				veritabanınada yazmak isterseniz Update başlıklı button kontrolüne tıklamanız  				gerekir. Bu durumda temel olarak, OleDbDataAdapter nesnesi, DataSet üzerindeki  				tüm değişiklikleri alıcak ve veritabanını Update metodu ile güncelleyecektir.  				Bu işlem için OleDbDataAdapter nesnesinin Update metodu,  UpdateCommand  				özelliğine bakar.  UpdateCommand özelliği, Update sorgusu içeren bir  				SqlCommand nesnesini işaret eder. Böylece güncelleme işlemi bu komut  				vasıtasıyla gerçekleşir. Bu işlemler yanında yeni satırlar ekleyebilir, var  				olanlarını silebilirsiniz. Görüldüğü gibi komple bir veritabanı uygulaması  				oldu. Bunun dışında uygulamamızın güçlü yönleride vardır. Örneğin yeni bir  				Siparis girin. Ancak Siparis numarasını aşağıdaki gibi var olmayan bir SepetID  				olarak belirleyin. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_15.gif" border="0" height="249" width="447" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 15. Var olmayan bir  				ForeignKey girdik.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu durumda aşağıdaki  				uyarıyı alırsınız. </font> 		</font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">			<font style="font-size: 10pt; font-style: italic" face="Verdana"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk52_16.gif" border="0" height="120" width="629" /></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şekil 16.  				ForeignKeyConstraint durumu.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">		</font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu durumda Yes derseniz  				buradaki değer otomatik olarak 1000 yapılır. İşte bu olay DataRelation  				nesnemizin becerisidir. Değerli okurlarım uzun ama bir okadarda faydalı  				olduğuna inandığım bir makalemizin daha sonuna geldik. Hepinize mutlu günler  				dilerim.</font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/data-form-wizard-yardimiyla-iliskili-tablo-uygulamalarinin-hazirlanmasi.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Strongly Typed DataSet - 2 (Kuvvetle Türlendirilmiş Veri Kümeleri)</title>
		<link>http://www.netanlatim.com/strongly-typed-dataset-2-kuvvetle-turlendirilmis-veri-kumeleri.html</link>
		<comments>http://www.netanlatim.com/strongly-typed-dataset-2-kuvvetle-turlendirilmis-veri-kumeleri.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:50:14 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[çeşitli diller]]></category>

		<category><![CDATA[her türlü Programlama]]></category>

		<category><![CDATA[Kuvvetle Türlendirilmiş Veri Kümeleri]]></category>

		<category><![CDATA[Strongly Typed DataSet]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/strongly-typed-dataset-2-kuvvetle-turlendirilmis-veri-kumeleri.html</guid>
		<description><![CDATA[Bir önceki makalemizde, Kuvvetle    Türlendirilmiş Veri Kümelerinin ne olduğunu ve nasıl oluşturulduğunu incelemiştik.    Bu makalemizde ise, bir türlendirilmiş veri kümesi yardımıyla satır ekleme,    arama, düzenleme ve silme gibi işlemlerin nasıl yapılacağını inceleyeceğiz.    Bu amaçla işe basit bir windows uygulaması ile başlıyoruz. Bu uygulamamızda [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bir önceki makalemizde, Kuvvetle    Türlendirilmiş Veri Kümelerinin ne olduğunu ve nasıl oluşturulduğunu incelemiştik.    Bu makalemizde ise, bir türlendirilmiş veri kümesi yardımıyla satır ekleme,    arama, düzenleme ve silme gibi işlemlerin nasıl yapılacağını inceleyeceğiz.    Bu amaçla işe basit bir windows uygulaması ile başlıyoruz. Bu uygulamamızda    kolaylık olması açısından Kuvvetle Türlendirilmiş Veri Kümemizi, Visual Studio.NET    ortamında oluşturdum. Uygulamamızda, Makale isimli sql tablomuzu kullanacağız.    Uygulamamızın formu izleyen şekildeki gibi olucak. </font></font><br />
<span id="more-390"></span></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_1.gif" border="0" height="409" width="562" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 1. Form    Tasarımımız.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Kullanıcı, Ekle  başlıklı butona tıkladığında, textBox kontrollerine girmiş olduğu değerlerden  oluşan yeni satırımız, dataTable&#8217;ımıza eklenmiş olucak. Bu işlemi gerçekleştiren  kodlar aşağıda verilmiştir.</font></font></p>
<table style="border-collapse: collapse" id="AutoNumber1" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">private</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      btnEkle_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font><font style="font-size: 10pt">     <font face="Verdana">{</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                 dsMakale.MakaleRow dr; </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Yeni bir satır tanımlanıyor.      MakaleRow bir DataRow tipidir ve bizim dsMakale isimli Kuvvetle      Türlendirilmiş Veri Kümesi sınıfımızda yer almaktadır.*/</font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 dr=mk.Makale.NewMakaleRow(); </font>     <font style="font-size: 10pt" color="#008000" face="Verdana">/* MakalNewRow      ile dr isimli MakaleRow nesnemizin, Makale isimli DataTable&#8217;ımızda yeni ve      boş bir satıra referans etmesi sağlanıyor. */</font><font style="font-size: 10pt" face="Verdana">     </font></p>
<p><font style="font-size: 10pt" face="Verdana">                 dr.Konu=txtKonu.Text; </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Veriler yeni satırımızın      ilgili alanlarına yerleştiriliyor. */</font></font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                 dr.Tarih=Convert.ToDateTime(txtTarih.Text);</font></p>
<p><font face="Verdana">                 dr.Adres=txtAdres.Text;</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                 mk.Makale.AddMakaleRow(dr); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Son olarak AddMakaleRow      metodu ile oluşturulan yeni satır dataTable&#8217;ımıza ekleniyor.*/</font></font></p>
<p><font style="font-size: 10pt" face="Verdana">     </font><font style="font-size: 10pt" face="Verdana">}</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu teknikte  dikkat edicek olursanız Kuvvetle Türlendirilmiş Veri Kümemize ait metodlar ve  nesneler kullanılmıştır. Örneğin, bir DataTable nesnesi ile referans edilen  bellek bölgesindeki tabloya, yeni bir satır eklemek için öncelikle yeni bir  DataRow nesnesi tanımlarız. Sonra bu DataRow nesnesini boş bir satır olacak  şekilde DataTable nesnemiz için oluştururuz. Daha sonra bu DataRow nesnesinde  her bir alan için yeni verileri ekleriz. Son olarakta bu oluşturulan yeni  DataRow nesnesini DataTable&#8217;ımıza ekleriz. Böylece, DataTable nesnemizin işaret  ettiği tabloya yeni bir satır eklemiş oluruz. Bu teknik klasik olarak  Türlendirilmemiş Veri Kümelerini kullandığımız örneklerde aşağıdaki kodlar ile  gerçekleştirimektedir. </font><font face="Verdana" size="2">          </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 9pt" size="2"></p>
<table style="border-collapse: collapse" id="AutoNumber2" bgcolor="#ffcc66" border="0" bordercolor="#111111" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%">
<blockquote><p><font face="Verdana" size="2">    DataRow drKlasik;</font></p></blockquote>
<p><font size="2">     </font><font size="2"><font face="Verdana">                 drKlasik=ds.Tables[0].NewRow();</font></font></p>
<p><font size="2">    </font><font size="2"><font face="Verdana">                 drKlasik[1]=txtKonu.Text;</font></font></p>
<p><font size="2">    </font><font size="2"><font face="Verdana">                 drKlasik[2]=Convert.ToDateTime(txtTarih.Text);</font></font></p>
<p><font size="2">    </font><font size="2"><font face="Verdana">                 drKlasik[3]=txtAdres.Text;</font></font></p>
<p><font size="2">    </font><font size="2"><font face="Verdana">                 ds.Tables[0].Rows.Add(drKlasik);</font></font></td>
</tr>
</table>
<p></font> </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Gördüğünüz gibi teknik olarak  iki yaklaşımda aynıdır. Ancak, aralarındaki farkı anlamak için kullanılan  ifadelere yakından bakmamız yeterlidir. Herşeyden önce Kuvvetle Türlendirilmiş  Veri Kümelerini kullanmak, kod yazarken programcıya daha anlaşılır gelmektedir.  Dilerseniz, bu iki tekniği aşağıdaki tablo ile karşılaştıralım.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font size="2"></p>
<table id="AutoNumber3" border="1" cellpadding="5" cellspacing="1" height="239" width="100%">
<tr>
<td align="center" bgcolor="#ffcc66" height="32" width="50%"><font style="font-size: 10pt; font-weight: 700" face="Verdana">UnTyped      Dataset Tekniği </font></td>
<td align="center" bgcolor="#ffcc66" height="32" width="50%"><font style="font-size: 10pt; font-weight: 700" face="Verdana">Typed DataSet      Tekniği</font></td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#ffcc66" height="35" width="100%"><font style="font-size: 10pt; font-weight: 700" face="Verdana">Yeni Bir      Satır Tanımlamak</font></td>
</tr>
<tr>
<td height="19" width="50%"><font style="font-size: 10pt" face="Verdana">     DataRow drKlasik;</font></td>
<td height="19" width="50%"><font style="font-size: 10pt" face="Verdana">     dsMakale.MakaleRow dr;</font>     <font style="font-size: 10pt" face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_2.gif" border="0" height="126" width="267" /></font></p>
<p><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi intelliSense      özelliği sayesinde, dsMakale dataSet&#8217;inden sonra yeni bir DataRow nesnesi      oluşturmak için gerekli söz dizimini bulmak ve anlamak son derece kolay.</font></td>
</tr>
<tr>
<td colspan="2" bgcolor="#ffcc66" height="38" width="100%">
<p align="center">     <font style="font-size: 10pt; font-weight: 700" face="Verdana">Tanımlanan      Yeni Satırı Oluşturmak</font></p>
</td>
</tr>
<tr>
<td height="19" width="50%"><font style="font-size: 10pt" face="Verdana" size="2">     drKlasik=ds.Tables[0].NewRow();</font>     <font style="font-size: 10pt" face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_4.gif" border="0" height="186" width="236" /></font></td>
<td height="19" width="50%"><font style="font-size: 10pt" face="Verdana">     dr=mk.Makale.NewMakaleRow();</font>     <font style="font-size: 10pt" face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_3.gif" border="0" height="184" width="232" /></font></p>
<p><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi, Typed      DataSet sınıfımız yardımıyla tanımlanan yeni satırı oluşturmak için      kullanacağımız söz dizimi çok daha okunaklı ve anlamlı.</font></td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#ffcc66" height="36" width="100%"><font style="font-size: 10pt; font-weight: 700" face="Verdana">Alanlara      Verileri Aktarmak</font></td>
</tr>
<tr>
<td height="19" width="50%"><font style="font-size: 10pt" size="2">     <font face="Verdana">                 drKlasik[1]=txtKonu.Text;</font><font face="Verdana">                 drKlasik[2]=Convert.ToDateTime(txtTarih.Text);</font></p>
<p><font face="Verdana">                 drKlasik[3]=txtAdres.Text;</font></p>
<p></font><font style="font-size: 10pt" face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_6.gif" border="0" height="46" width="253" /></font></td>
<td height="19" width="50%"><font style="font-size: 10pt" face="Verdana">                 dr.Konu=txtKonu.Text; </font><font style="font-size: 10pt">     </font><font style="font-size: 10pt"><font face="Verdana">                 dr.Tarih=Convert.ToDateTime(txtTarih.Text);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 dr.Adres=txtAdres.Text;</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_5.gif" border="0" height="187" width="153" /></font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">Bir Type DataSet üzerinden oluşturduğumuz DataRow      nesnesinin alanlarına veri aktarırken hangi alanların olduğunu kolayca      gözlemleyebiliriz. Üstelik bu biçim, kodumuza daha kolay okunurluk ve anlam      kazandırır.</font></font></td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#ffcc66" height="34" width="100%"><font style="font-size: 10pt; font-weight: 700" face="Verdana">Oluşturulan      Satırın Tabloya Eklenmesi</font></td>
</tr>
<tr>
<td height="19" width="50%"><font style="font-size: 10pt">     <font face="Verdana">ds.Tables[0].Rows.Add(drKlasik);</font></font> <font style="font-size: 10pt">    <font face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_8.gif" border="0" height="185" width="248" /></font></font></td>
<td height="19" width="50%"><font style="font-size: 10pt" face="Verdana">     mk.Makale.AddMakaleRow(dr);</font>     <font style="font-size: 10pt" face="Verdana">     <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_7.gif" border="0" height="184" width="211" /></font></p>
<p><font style="font-size: 10pt" face="Verdana">NewMakaleRow metoduna      ulaşmak gördüğünüz gibi daha kolaydır. </font></td>
</tr>
</table>
<p></font>  </font></p>
<p align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana">Tablo 1.  Türlendirilmiş (Typed) ve Türlendirilmemiş (UnTyped) Veri Kümelerinde Satır  Ekleme İşlemlerinin Karşılaştırılması.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Her iki teknik  arasında kavramsal olarak fark bulunmamasına rağmen, uygulanabilirlik ve  kolaylık açısından farklar olduğunu görüyoruz. Bu durum verileri ararken,  düzenlerken veya silerkende karşımıza çıkmaktadır. Şimdi uygulamamızda belli bir  satırı nasıl bulacağımızı inceleyelim. Kullanıcı Bul başlıklı butona  tıkladığında txtMakaleID textBox kontrolüne girdiği değerdeki satır bulunacak ve  bulunan satıra ait alan verileri, formumuzdaki diğer textBox kontrollerine  yüklencek. Arama işleminin PrimaryKey üzerinden yapıldığınıda belirtelim. Şimdi  kodlarımızı yazalım.</font></font></p>
<table id="AutoNumber4" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">private</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      btnBul_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font><font style="font-size: 10pt">     <font face="Verdana">{</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                 dsMakale.MakaleRow drBulunan; </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Arama sonucu bulunan satırı      tutacak DataRow nesnemiz tanımlanıyor. */</font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 drBulunan=mk.Makale.<span style="background-color: #ffcc66">FindByID</span>(Convert.ToInt32(txtMakaleID.Text));     </font><font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      FindByID metodu, Türlendirilimiş Veri Kümemizdeki tablomuzun Primary Key      alanı üzerinden arama yapıyor ve sonucu drBulunan DataRow(MakaleRow)      nesnemize atıyor. */</font></font></p>
<p><font size="2">          </font><font style="font-size: 10pt" face="Verdana">                </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">if</font><font style="font-size: 10pt">(drBulunan!=</font><font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">)     </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Eğer aranan satır bulunursa      drBulunan değeri null olmayacaktır. */</font></font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                 {</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                             txtKonu.Text=drBulunan.Konu; </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Bulunan satıra ait alan      verileri ilgili kontrollere atanıyor. */</font></font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                             txtTarih.Text=drBulunan.Tarih.ToString();</font></p>
<p><font face="Verdana">                             txtAdres.Text=drBulunan.Adres;</font></p>
<p><font face="Verdana">                 }</font></p>
<p></font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 else</font></p>
<p><font style="font-size: 10pt">     </font><font style="font-size: 10pt"><font face="Verdana">                 {</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                             MessageBox.Show(&#8221;Aranan Makale Bulunamadı&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 }</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">}</font></font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu arama  tekniğinin, türlendirilmemiş veri kümelerindeki arama tekniğine göre çok farklı  bir özelliği vardır. Klasik yöntemde bir DataTable üzerinden arama yaparken Find  metodunu kullanırız.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_11.gif" border="0" height="53" width="394" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 3. Klasik    Find metodu.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi  Find metodu, PrimaryKey değerini alır ve bu değeri kullanarak, tablonun  PrimaryKey alanı üzeriden arama yapar. Oysa örneğimizde kullandığımız  Türlendirilmiş Veri Kümesine ait Makale DataTable nesnesinin Find metodu isim  değişikliğine uğrayrak FindByID haline dönüşmüştür. Nitekim, bu yeni DataTable  nesnesi hangi alanın PrimaryKey olduğunu bilir ve metodun ismini buna göre  değiştirerek arama kodunu yazmamızı son derece kolaylaştırır.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_10.gif" border="0" height="162" width="287" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 4. FindByID    metodu;</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Diğer yandan,  Klasik Find metodumuz, key parametresini object türünden alırken, FindByID  metodumuz PrimaryKey alanının değeri ne ise, parametreyi o tipten alır. Buda  FindByID metodunun,  klasik Find metodundanki object türünden dolayı, daha  performanslı çalışmasına neden olur.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_12.gif" border="0" height="39" width="440" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 5. FindByID    metodunda parametre tipi.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Diğer yandan  aynı işi yapan bu metodlar arasındaki fark birden fazla Primary Key alanına  sahip olan tablolarda daha çok belirginleşir. Söz gelimi, Sql sunucusunda yer  alan Northwind veri tabanındaki, Order Details tablosunun hem OrderID alanı  hemde ProductID alanı Primary Key&#8217;dir. Dolayısıyla bu iki alan üzerinden arama  yapmak istediğimizde klasik Find metodunu aşağıdaki haliyle kullanırız.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt"><font face="Verdana">DataRow drBulunan;</font></p>
<p></font></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt"><font face="Verdana">drBulunan = dt.<span style="background-color: #ffcc66">Find(</span></font></font><font style="font-size: 10pt; background-color: #ffcc66" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt; background-color: #ffcc66" face="Verdana">  objcet[]{10756,9);</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Oysaki bu  tabloyu Türlendirilmiş Veri Kümesi üzerinden kullanırsak kod satırları  aşağıdakine dönüşür. </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana"> drBulunan=ds.SiparisDetay.<span style="background-color: #ffcc66">FindByOrderIDProductID(10756,9);</span></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Gelelim  verilerin düzenlenmesi işlemine. Şimdi uygulamamızda bulduğumuz satıra ait  verileri textBox kontrollerine aktarıldıktan sonra, üzerlerinde değişiklik  yaptığımızda bu değişikliklerin DataTable&#8217;ımıza nasıl yansıtacağımıza bakalım.  Normal şartlarda, Türlendirilmemiş Veri Kümesi üzerindeki bir DataTable&#8217;a ait  herhangibir satırda yapılan değşiklikler için, güncel DataRow nesnesine ait  BeginEdit ve EndEdit metodları kullanılmaktadır. Oysaki Türlendirilmiş Veri  Kümelerindenki satırlara ait alanlar birer özellik olarak tutulduklarından,  sadece bu özelliklere yeni değerlerini atamamız yeterli olmaktadır. Bu veri  kümesinin bir sınıf şeklinde tutuluyor olmasının sağlamış olduğu güçtür. Bu  nedenle Türlendirilmiş Veri Kümeleri Strongly takısını haketmektedir. Dilerseniz  uygulamamızda arama sonucu elde ettiğimiz bir satıra ait alan değerlerini  güncelleyeceğimiz kod satırlarını yazalım. </font></font></p>
<table id="AutoNumber5" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">private</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      btnDegistir_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font> <font style="font-size: 10pt">    <font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 drBulunan.Konu=txtKonu.Text;</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 drBulunan.Adres=txtAdres.Text;</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 drBulunan.Tarih=Convert.ToDateTime(txtTarih.Text);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">}</font></font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi  uygulamamızı çalıştıralım. ID değeri 6 olan satırı bulalım. Daha sonra bu  satırdaki bazı veileri değiştirelim ve Degistir başlıklı butona tıklayalım.  Değişikliklerin hemen gerçekleştiğini ve DataGrid kontrolünede yansıdığını  görürüz.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_13.gif" border="0" height="352" width="544" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 6. ID=6    olan satır bulunuyor.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk51_14.gif" border="0" height="352" width="544" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 7. Güncel    Satır Verileri Değiştiriliyor.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Son olarak satır  silme işlemini inceleyelim. Bu amaçla RemoveMakaleRow metodunu kullanacağız.  Elbette bu metod, örneğimizde oluşturduğumuz Kuvvetle Türlendirilmiş Veri  Kümemizin sınıfı  içinde yeniden yazılmış bir metoddur ve sınıfımız  içindeki prototipide şu şekildedir.</font></font></p>
<table id="AutoNumber6" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">public</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      RemoveMakaleRow(MakaleRow row) </font></font><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 this</font><font style="font-size: 10pt" face="Verdana">.Rows.Remove(row);</font></p>
<p><font style="font-size: 10pt" face="Verdana">}</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Açıkçası yaptığı  işlem sınıfın Rows koleksiyonundan row parameteresi ile gelen satırı  çıkartmaktır. Uygulamamızda ise bu metodu aşağıdaki şekilde kullanırız.</font></font></p>
<table id="AutoNumber7" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">private</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      btnSil_Click(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font> <font style="font-size: 10pt">    <font face="Verdana">{</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 mk.Makale.RemoveMakaleRow(drBulunan);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">}</font></font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu metod  parametre olarak aldığı satırı tablodan çıkartır. </font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/strongly-typed-dataset-2-kuvvetle-turlendirilmis-veri-kumeleri.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Strongly Typed DataSet - 1 (Kuvvetle Türlendirilmiş Veri Kümeleri)</title>
		<link>http://www.netanlatim.com/strongly-typed-dataset-1-kuvvetle-turlendirilmis-veri-kumeleri.html</link>
		<comments>http://www.netanlatim.com/strongly-typed-dataset-1-kuvvetle-turlendirilmis-veri-kumeleri.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:49:01 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[Kuvvetle Türlendirilmiş]]></category>

		<category><![CDATA[Örnekler]]></category>

		<category><![CDATA[programlama dilleri]]></category>

		<category><![CDATA[programlamalar]]></category>

		<category><![CDATA[Strongly Typed DataSet]]></category>

		<category><![CDATA[Veri Kümeleri]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/strongly-typed-dataset-1-kuvvetle-turlendirilmis-veri-kumeleri.html</guid>
		<description><![CDATA[Bugünkü  makalemizde kuvvetle türlendirilmiş veri kümelerinin ne olduğunu ve nasıl  oluşturulduklarını incelemeye çalışacağız. Kuvvetle türlendirilmiş veri  kümelerini tanımlamadan önce, aşağıdaki kod satırının incelemekle işe  başlayalım.




          textBox1.Text=dsMakale1.Tables[&#8221;Makale&#8221;].Rows[3][&#8221;Konu&#8221;].ToString();


  Bu satır ile,  dsMakale isimli dataSet nesnemizin bellekte işaret ettiği veri bölgesinde yer  [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bugünkü  makalemizde kuvvetle türlendirilmiş veri kümelerinin ne olduğunu ve nasıl  oluşturulduklarını incelemeye çalışacağız. Kuvvetle türlendirilmiş veri  kümelerini tanımlamadan önce, aşağıdaki kod satırının incelemekle işe  başlayalım.</font></font><br />
<span id="more-389"></span><br />
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 9pt" face="Tahoma"></p>
<table id="AutoNumber2" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" height="25" width="100%">
<tr>
<td height="25" width="100%"><font style="font-size: 10pt" face="Verdana">     </font> <font style="font-size: 10pt" face="Verdana">    textBox1.Text=dsMakale1.Tables[&#8221;Makale&#8221;].Rows[3][&#8221;Konu&#8221;].ToString();</font></td>
</tr>
</table>
<p></font>  </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu satır ile,  dsMakale isimli dataSet nesnemizin bellekte işaret ettiği veri bölgesinde yer  alan DataTable&#8217;lardan Makale tablosuna işaret edenin, 4ncü satırındaki Konu  alanının değeri alınarak, TextBox kontrolümüzün text özelliğine atanmaktadır.  Şimdide aşağıdaki kod satırını ele alalım.</font></font></p>
<table id="AutoNumber3" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" height="26" width="100%">
<tr>
<td height="26" width="100%"><font style="font-size: 10pt" face="Verdana">     textBox1.Text=rsMakale.Fields(&#8221;Konu&#8221;).Value</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu ifade eski  dostumuz ADO daki rsMakale isimli recordSet&#8217;i kullanarak, Konu isimli alanın  değerine ulaşmıştır. Dikkat edicek olursanız bu iki ifade arasında uzunluk  açısından belirgin bir fark vardır. İkinci yazım daha kolaydır. Zaten bu  nedenle, ADO.NET&#8217;i öğrenen programcıların ilk başta en çok karşılaştıkları  zorluk, bu kod yazımının uzunluğu olmuştur. Bununla birlikte, ADO.NET&#8217; in XML  tabanlı bir mimariye sahip olması, karşımıza Kuvvetle Türlendirilmiş Veri  Kümelerini çıkarmaktadır. Microsfot.NET mimarları, programlarımızda aşağıdakine  benzer daha kısa ifadelerin kullanılabilmesi amacıyla, Kuvvetle Güçlendirilmiş  Veri Kümeleri kavramını ADO.NET&#8217;e yerleştirmiştir.</font></font></p>
<table id="AutoNumber4" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" height="28" width="100%">
<tr>
<td height="28" width="100%"><font style="font-size: 10pt" face="Verdana"> textBox1.Text=dsTypedMakale.Makale[3].Konu.ToString();</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu ifade ilk  yazdığımız ifadeye göre çok daha kısadır. Peki bu nasıl sağlanmıştır.  dsTypedMakale isimli DataSet nesnemiz aslında Kuvvetle Türlendirilmiş Veri  Kümemizin ta kendisidir. Bu noktada Kuvvetle Türlendirilmiş Veri Kümesi&#8217;nin ne  olduğunu tanımlayabiliriz. </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bir Strongly Typed  DataSet ( Kuvvetle Türlendirilmiş Veri Kümesi ), DataSet sınıfından türetilmiş,  programcı tarafından belirtilen bir xml schema sınıfını baz alan, veri  bağlantılarının özelleştirilip yukarıdaki gibi kısa yazımlar ile erişimlere  imkan sağlayan, özelleştirilmiş bir DataSet sınıfıdır.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu geniş kavramı  anlamak için elbette en kolay yol örneklendirmek olucak. Ancak bundan önce  Kuvvetle Türlendirilmiş Veri Kümemizin nasıl oluşturacağımızı görelim. Bunun  için elimizde iki yol var. Yollardan birisi, komut satırından XSD.exe XML Schema  Defination Tool&#8217;unu kullanmak. Bu yol biraz daha zahmetli olmakla birlikte  Visual Studio.NET&#8217;e olan gereksinimi kaldırdığı için zaman zaman tercih edilir.  Diğer yolumuz ise Kuvvetle Türlendirilmiş Veri Kümemizi Visual Studio.NET  ortamında oluşturmak. Yollardan hangisini seçersek seçelim, Kuvvetle  Türlendirilmiş Veri Kümemizin oluşturulması için bize mutlaka bir xml schema  dosyası (xsd uzantılı) gerekiyor. Çünkü Kuvvetle Türlendirilmiş Veri Kümemiz,  bir xml schema dosyası baz alınarak oluşturulmaktadır. Şimdi dilerseniz komut  satırı yardımıyla bir Kuvvetle Türlendirilmiş Veri Kümesinin nasıl  oluşturulacağını inceleyelim. Bunun için öncelikle biraz kod yazmamız gerekecek.  İzleyen kodlar ile, bir DataSet&#8217;i gerekli tablo bilgileri ile yükleyecek ve daha  sonra bu DataSet&#8217;e ait xml schema bilgilerini, DataSet sınıfına ait  WriteXmlSchema metodu ile bir xsd dosyasına aktaracağız. Örneğin basit olması  amacıyla bir console uygulaması oluşturalım.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font size="2"></p>
<table id="AutoNumber1" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%">     <font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System;</font></p>
<p><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data;</font></p>
<p><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data.SqlClient;</font></p>
<p><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">namespace</font></font><font style="font-size: 10pt" face="Verdana">      TypeDataSet2</font></p>
<p><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font size="2">          </font>     <font style="font-size: 10pt" color="#0000ff" face="Verdana">                 class</font><font style="font-size: 10pt" face="Verdana"> Class1</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                 {</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                            </font></font><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">static</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      Main(</font><font style="font-size: 10pt" color="#0000ff">string</font></font><font style="font-size: 10pt" face="Verdana">[]      args)</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                             {</font></p>
<p></font></p>
<p align="left"><font style="font-size: 10pt"><font face="Verdana">                                         SqlConnection conFriends=</font></font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      SqlConnection(&#8221;data source=localhost;initial catalog=Friends;integrated      security=sspi&#8221;);</font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         SqlDataAdapter da=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      SqlDataAdapter(&#8221;Select * From Makale&#8221;,conFriends);</font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         DataSet dsMakale=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      DataSet(&#8221;Makaleler&#8221;);</font></p>
<p><font style="font-size: 10pt">     </font><font style="font-size: 10pt"><font face="Verdana">                                         conFriends.Open();</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                                         da.FillSchema(dsMakale,SchemaType.Source,&#8221;Makale&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                                         conFriends.Close();</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                                         dsMakale.WriteXmlSchema(&#8221;Makaleler.xsd&#8221;);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                             }</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 }</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">}</font></font></td>
</tr>
</table>
<p></font>  </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Yukarıdaki kodları  kısaca açıklayalım. Burada Sql sunucumuzda yer alan Friends isimli veritabanına  bağlanıyor ve Makale isimli tabloya ait schema bilgilerini DataSet nesnemize  yüklüyoruz. Daha sonra ise, DataSet nesnemizin WriteXmlSchema metodu ile,  DataSet&#8217;in yapısını xml tabanlı schema dosyası olarak ( Makaleler.xsd ) sisteme  kaydediyoruz. İşte Kuvvetle Türlendirişmiş Veri Kümemizi bu xsd uzantılı schema  dosyası yardımıyla oluşturacağız. Sistemizde uygulamamızı oluşturduğumuz yerdeki  Debug klasörüne baktığımızda, aşağıdaki görüntüyü elde ederiz. </font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana"> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_1.gif" border="0" height="126" width="350" /></font></font></p>
<p align="left"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 1. XML  Schema Dosyamız.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi .NET  Framework&#8217;ün XSD.exe aracını kullanarak, bu schema dosyasından Kuvvetle  Türlendirilmiş Veri Kümemizi temsil edicek sınıfı oluşturalım. Bunun için, komut  satırında aşağıdaki satırı yazarız.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_2.gif" border="0" height="175" width="597" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 2. Kuvvetle    Türlendirilmiş Veri Kümesi sınıfının oluşturulması.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Burada görüldüğü  gibi, xsd schema dosyamızdan, Kuvvetle Türlendirilmiş Veri Kümesi sınıfımız  (Makaleler.cs) oluşturulmuştur. xsd aracındaki /d parametresi, sınıfımızın  DataSet sınıfından türetileceğini belirtmektedir. Şimdi Debug klasörümüze tekrar  bakıcak olursak, Kuvvetle Türlendirilmiş Veri Kümesi sınıfımızın oluşturulmuş  olduğunu görürüz. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_3.gif" border="0" height="121" width="370" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 3. Kuvvetle    Türlendirilmiş Veri Kümesi Sınıfımız.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Peki bu  oluşturduğumuz Kuvvetle Türlendirilmiş Veri Kümesi sınıfını uygulamamızda nasıl  kullanacağız. Bu oldukça basit. Yeni DataSet nesnemizi, Makaleler.cs sınıfından  türeteceğiz. Aşağıdaki kodu inceleyelim.</font></font></p>
<table id="AutoNumber5" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">using</font><font style="font-size: 10pt" face="Verdana">      System;</font><font color="#0000ff">     <font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data;</font></p>
<p><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">using</font></font><font style="font-size: 10pt" face="Verdana">      System.Data.SqlClient;</font></p>
<p><font color="#0000ff"><font style="font-size: 10pt" face="Verdana">namespace</font></font><font style="font-size: 10pt" face="Verdana">      TypeDataSet2</font></p>
<p><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 class</font><font style="font-size: 10pt" face="Verdana"> Class1</font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                             static</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      Main(</font><font style="font-size: 10pt" color="#0000ff">string</font></font><font style="font-size: 10pt" face="Verdana">[]      args)</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                             {</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                                         SqlConnection conFriends=</font></font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      SqlConnection(&#8221;data source=localhost;initial catalog=Friends;integrated      security=sspi&#8221;);</font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         SqlDataAdapter da=</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      SqlDataAdapter(&#8221;Select * From Makale&#8221;,conFriends); </font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                                         conFriends.Open();</font></p>
<p></font><font style="font-size: 10pt"><font face="Verdana">                                         Makaleler dsTypedMakale=</font></font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">      Makaleler(); </font></font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* Kuvvetle Türlendirilmiş Veri      Kümesi sınıfımızdan bir DataSet nesnesi türetiyoruz.*/</font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         da.Fill(dsTypedMakale.Makale); </font><font color="#008000">     <font style="font-size: 10pt" face="Verdana">/* SqlDataAdapter nesnemiz      yardımıyla, yeni dataSet&#8217;imizdeki Makale isimli tablomuzu Sql sunucumuzda      yer alan Makale isimli tablonun verileri ile yüklüyoruz. */</font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         Console.WriteLine(<span style="background-color: #ffcc99">dsTypedMakale.Makale[3].Konu</span>.ToString());     </font><font color="#008000"><font style="font-size: 10pt" face="Verdana">/*      Yeni DataSet nesnemizdeki Makale tablosunun 4ncü satırındaki Konu alanının      değerine erişiyoruz. */</font></font></p>
<p><font style="font-size: 10pt">     </font><font style="font-size: 10pt"><font face="Verdana">                                         conFriends.Close(); </font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                             }</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 }</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">}</font></font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Uygulamamızı  çalıştırdığımızda aşağıdaki sonu elde ederiz. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_4.gif" border="0" height="91" width="373" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 4. Uygulamanın    sonucu.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi bir  Kuvvetle Türlendirilmiş Veri Kümesi oluşturmak ve kullanmak son derece basit.  Dilerseniz xsd aracı ile oluşturduğumuz Makaleler.cs isimli Kuvvetle  Türlendirilmiş Veri Kümesi sınıfımızı ele alalım. Bu sınıfı oluşturduğunuzda  mutlaka incelemenizi tavsiye ederim. Çok uzun bir dosya olduğunundan tüm kod  satırlarına burada yer vermiyorum. Ancak dikkatimizi çekicek bir kaç üyeyi  göstereceğim. Öncelikle sınıf tanımımıza bir göz atalım. </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font color="#0000ff"></p>
<table id="AutoNumber10" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">public</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">class</font></font><font style="font-size: 10pt" face="Verdana">      Makaleler <span style="background-color: #ffcc66">: DataSet </span></font><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font style="font-size: 10pt" face="Verdana">&#8230;</font></p>
<p><font style="font-size: 10pt" face="Verdana">}</font></td>
</tr>
</table>
<p></font>  </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Daha öncedende  söylediğimiz gibi Kuvvetle Türlendirilmiş Veri Kümesi sınıfları DataSet  sınıfından türetilmektedir. Yeni dataSet sınıfımız, içereceği tablo, alan,  kısıtlama, ilişki gibi bilgileri bir xsd dosyasından almaktaydı. Biz xsd  dosyasını oluştururken, DataSet&#8217;e Makale isimli tablonun yapısını yüklemiştik.  Bu durumda, Kuvvetle Türlendirilmiş Veri Kümesi sınıfımız içinde, Makale isimli  tablomuzu belirten yeni bir DataTable üyesi kullanılır.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font color="#0000ff"></p>
<table id="AutoNumber7" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" height="25" width="100%">
<tr>
<td height="25" width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">private</font><font style="font-size: 10pt" face="Verdana">      MakaleDataTable tableMakale;</font></td>
</tr>
</table>
<p></font> </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Burada MakaleDataTable, DataTable  sınfının özelleştirilmiş bir haline sunar. </font></font></p>
<table id="AutoNumber6" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">protected</font><font style="font-size: 10pt" face="Verdana">      Makaleler(SerializationInfo info, StreamingContext context) </font><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 string</font><font style="font-size: 10pt"> strSchema = ((</font><font style="font-size: 10pt" color="#0000ff">string</font><font style="font-size: 10pt">)(info.GetValue(&#8221;XmlSchema&#8221;,     </font><font style="font-size: 10pt" color="#0000ff">typeof</font><font style="font-size: 10pt">(</font><font style="font-size: 10pt" color="#0000ff">string</font></font><font style="font-size: 10pt" face="Verdana">))));</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 if</font><font style="font-size: 10pt"> ((strSchema != </font>     <font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">))     </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font style="font-size: 10pt" face="Verdana">                             DataSet ds = </font>     <font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      DataSet();</font></p>
<p><font style="font-size: 10pt" face="Verdana">                             ds.ReadXmlSchema(</font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">      XmlTextReader(</font><font style="font-size: 10pt" color="#0000ff">new</font></font><font style="font-size: 10pt" face="Verdana">      System.IO.StringReader(strSchema)));</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                                         if</font><font style="font-size: 10pt"> ((ds.Tables[&#8221;Makale&#8221;] != </font>     <font style="font-size: 10pt" color="#0000ff">null</font><font style="font-size: 10pt">))     </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         {</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                                                     this</font><font style="font-size: 10pt">.Tables.Add(</font><font style="font-size: 10pt" color="#0000ff">new</font></font><font style="font-size: 10pt" face="Verdana">      MakaleDataTable(ds.Tables[&#8221;Makale&#8221;]));</font></p>
<p><font style="font-size: 10pt" face="Verdana">                                         }</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                          </font></p>
<p><font style="font-size: 10pt"><font face="Verdana">&#8230;</font></p>
<p><font face="Verdana">}</font></p>
<p></font><font style="font-size: 10pt" color="#0000ff"><font face="Verdana">&#8230;</font></p>
<p></font><font style="font-size: 10pt" color="#0000ff"><font face="Verdana">public</font></font><font style="font-size: 10pt" face="Verdana">      MakaleDataTable Makale </font></p>
<p><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 get</font><font style="font-size: 10pt"> </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                             return</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">this</font></font><font style="font-size: 10pt" face="Verdana">.tableMakale;</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                 }</font></p>
<p><font face="Verdana">}</font></p>
<p></font><font style="font-size: 10pt" color="#0000ff" face="Verdana">     </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">&#8230;</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Görüldüğü gibi  MakaleDataTable isminde yeni bir sınıfımız vardır. Bu sınıf Makale isimli  tabloyu tüm elemanları ile tanımlar. Bunun için, bu sınıf DataTable sınıfından  türetilir. Makale tablosundaki her bir alan bu sınıf içerisinde birer özellik  haline gelir. Bununla birlikte bu yeni DataTable sınıfı, alan ekleme, alan silme  gibi metodlar ve pek çok olayıda tanımlar. Diğer yandan pek çok DataTable  metoduda bu sınıf içinde override edilir.</font></font></p>
<table id="AutoNumber8" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">public</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">class</font><font style="font-size: 10pt">      MakaleDataTable : DataTable, System.Collections.IEnumerable </font></font><font style="font-size: 10pt" face="Verdana">{</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 private</font><font style="font-size: 10pt" face="Verdana"> DataColumn      columnID;</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 private</font><font style="font-size: 10pt" face="Verdana"> DataColumn      columnKonu;</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 private</font><font style="font-size: 10pt" face="Verdana"> DataColumn      columnTarih;</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 private</font><font style="font-size: 10pt" face="Verdana"> DataColumn      columnAdres;</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" color="#0000ff" face="Verdana">                 &#8230;</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 public</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">int</font><font style="font-size: 10pt">      Count </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font style="font-size: 10pt" face="Verdana">                </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 get</font><font style="font-size: 10pt"> </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                             {</font></p>
<p><font style="font-size: 10pt" face="Verdana">                            </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 return</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">this</font></font><font style="font-size: 10pt" face="Verdana">.Rows.Count;</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                             }</font></p>
<p><font face="Verdana">                 }</font></p>
<p></font><font size="2">          </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 internal</font><font style="font-size: 10pt"> DataColumn IDColumn </font>     </font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font style="font-size: 10pt" face="Verdana">                            </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">get</font><font style="font-size: 10pt">     </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                             {</font></p>
<p><font style="font-size: 10pt" face="Verdana">                                        </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">     return</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">this</font></font><font style="font-size: 10pt" face="Verdana">.columnID;</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                             }</font></p>
<p><font face="Verdana">                 }</font></p>
<p></font><font size="2">               </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 public</font><font style="font-size: 10pt"> MakaleRow </font>     <font style="font-size: 10pt" color="#0000ff">this</font><font style="font-size: 10pt">[</font><font style="font-size: 10pt" color="#0000ff">int</font><font style="font-size: 10pt">      index] </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                             get</font><font style="font-size: 10pt"> </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                             {</font></p>
<p><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                                         return</font><font style="font-size: 10pt"> ((MakaleRow)(</font><font style="font-size: 10pt" color="#0000ff">this</font></font><font style="font-size: 10pt" face="Verdana">.Rows[index]));</font></p>
<p><font style="font-size: 10pt"><font face="Verdana">                             }</font></p>
<p><font face="Verdana">                 }</font></p>
<p></font><font size="2">          </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 public</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">event</font></font><font style="font-size: 10pt" face="Verdana">      MakaleRowChangeEventHandler MakaleRowChanged;</font></p>
<p><font size="2">          </font><font style="font-size: 10pt" face="Verdana">&#8230;</font></p>
<p><font size="2">          </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 public</font><font style="font-size: 10pt"> </font>     <font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      AddMakaleRow(MakaleRow row) </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font style="font-size: 10pt" color="#0000ff" face="Verdana">                             this</font><font style="font-size: 10pt" face="Verdana">.Rows.Add(row);</font></p>
<p><font style="font-size: 10pt" face="Verdana">                 }</font></p>
<p><font size="2">          </font><font face="Verdana"><font style="font-size: 10pt" color="#0000ff">                 public</font><font style="font-size: 10pt"> MakaleRow AddMakaleRow(</font><font style="font-size: 10pt" color="#0000ff">string</font><font style="font-size: 10pt">      Konu, System.DateTime Tarih, </font>     <font style="font-size: 10pt" color="#0000ff">string</font><font style="font-size: 10pt">      Adres) </font></font></p>
<p><font style="font-size: 10pt" face="Verdana">                 {</font></p>
<p><font style="font-size: 10pt" face="Verdana">                             MakaleRow rowMakaleRow = ((MakaleRow)(</font><font style="font-size: 10pt" color="#0000ff" face="Verdana">this</font><font style="font-size: 10pt" face="Verdana">.NewRow()));</font></p>
<p><font style="font-size: 10pt" face="Verdana">                             rowMakaleRow.ItemArray = </font><font face="Verdana">     <font style="font-size: 10pt" color="#0000ff">new</font><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">object</font><font style="font-size: 10pt">[]      {</font><font style="font-size: 10pt" color="#0000ff">null</font></font><font style="font-size: 10pt" face="Verdana">,Konu,Tarih,Adres};</font></p>
<p><font style="font-size: 10pt" color="#0000ff" face="Verdana">                             this</font><font style="font-size: 10pt" face="Verdana">.Rows.Add(rowMakaleRow);</font></p>
<p><font style="font-size: 10pt" color="#0000ff" face="Verdana">                             return</font><font style="font-size: 10pt" face="Verdana"> rowMakaleRow;</font></p>
<p><font style="font-size: 10pt" face="Verdana">                 }</font></p>
<p><font size="2">     </font> <font size="2">    </font> <font size="2">    <font style="font-size: 10pt">     </font></font><font size="2"><font style="font-size: 10pt"><font face="Verdana">&#8230;</font></font></font></p>
<p><font size="2"><font style="font-size: 10pt">    </font></font><font size="2"><font style="font-size: 10pt"><font face="Verdana">}</font></font></font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Buraya kadar ,  komut satırı yardımıyla ve kod yazarak bir Kuvvetle Türlendirilmiş Veri  Kümesinin nasıl oluşturulacağını gördük. Bu teknikteki adımları gözden geçirmek  gerekirse izlememiz gereken yol şöyle olucaktır.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_5.gif" border="0" height="345" width="260" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 5. Kuvvetle    Türlendirilmiş Veri Kümesi Oluşturulma Aşamaları</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana"><span style="font-size: 10pt">Şimdide,  Kuvvetle Türlendirilmiş Veri Kümesi sınıfını, Visual Studio.NET ortamında nasıl  geliştireceğimizi görelim. Bu daha kolay bir yoldur. Öncelikle Visual Studio.Net  ortamında bir Windows Uygulaması açalım. Daha sonra, Server Explorer  penceresinden Makale isimli tablomuzu Formumuza sürükleyelim.</span></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_6.gif" border="0" height="434" width="270" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 6. Server    Explorer ile Makale Tablosunun Forma Alınması</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Bu durumda  formumuzda otomatik olarak SqlConnection ve SqlDataAdapter nesnelerimiz oluşur.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_7.gif" border="0" height="44" width="250" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 7. SqlConnection    ve SqlDataAdapter otomatik olarak oluşturulur.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Şimdi  SqlDataAdapter nesnemizin özelliklerinden Generate DataSet&#8217;e tıkladığımızda  karşımıza aşağıdaki pencere çıkacaktır. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_8.gif" border="0" height="421" width="374" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 8. DataSet    oluşturuluyor.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Burada DataSet  nesnemiz otomatik olarak oluşturulacaktır. DataSet&#8217;imize dsMakale adını verelim  ve OK başlıklı butona basalım. Şimdi Solution Explorer&#8217;da Show All Files  seçeneğine tıklarsak, Kuvvetle Türlendirilmiş Veri Kümesi sınıfımızın  oluşturulduğunu görürüz.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_9.gif" border="0" height="240" width="228" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 9. Kuvvetle    Türlendirilmiş Veri Kümesi</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Artık  uygulamamızda bu sınıfı kullanabiliriz. İşte örnek kod satırlarımız.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font color="#0000ff" size="2"></p>
<table id="AutoNumber9" bgcolor="#ffcc66" border="0" cellpadding="5" cellspacing="1" width="100%">
<tr>
<td width="100%"><font style="font-size: 10pt" color="#0000ff" face="Verdana">private</font><font face="Verdana"><font style="font-size: 10pt">     </font><font style="font-size: 10pt" color="#0000ff">void</font><font style="font-size: 10pt">      Form1_Load(</font><font style="font-size: 10pt" color="#0000ff">object</font></font><font style="font-size: 10pt" face="Verdana">      sender, System.EventArgs e)</font><font size="2">     <font face="Verdana">{</font></p>
<p></font><font size="2"><font face="Verdana">                 dsMakale mk=</font></font><font style="font-size: 10pt" color="#0000ff" face="Verdana">new</font><font style="font-size: 10pt" face="Verdana">      dsMakale();</font></p>
<p><font style="font-size: 10pt">     </font><font style="font-size: 10pt"><font face="Verdana">                 sqlDataAdapter1.Fill(mk.Makale);</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">                 textBox1.Text=<span style="background-color: #ffffff">mk.Makale[3].Konu</span>.ToString();</font></font></p>
<p><font style="font-size: 10pt">    </font><font style="font-size: 10pt"><font face="Verdana">}</font></font></td>
</tr>
</table>
<p></font>  </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font style="font-size: 10pt" face="Verdana">Uygulamamızı  çalıştırdığımızda aşağıdaki sonucu elde ederiz.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font style="font-size: 10pt; font-style: italic" face="Verdana">    <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk50_10.gif" border="0" height="144" width="296" /></font><br />
<font style="font-size: 10pt; font-style: italic" face="Verdana">Şekil 10. Uygulamanın    Sonucu.</font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/strongly-typed-dataset-1-kuvvetle-turlendirilmis-veri-kumeleri.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Temsilci(Delegate) Kavramına Giriş</title>
		<link>http://www.netanlatim.com/temsilcidelegate-kavramina-giris.html</link>
		<comments>http://www.netanlatim.com/temsilcidelegate-kavramina-giris.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:47:47 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[C# (csharp)]]></category>

		<category><![CDATA[Delegate]]></category>

		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[Temsilci]]></category>

		<category><![CDATA[temsilci Kavramına Giriş]]></category>

		<category><![CDATA[uygulama]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/temsilcidelegate-kavramina-giris.html</guid>
		<description><![CDATA[Bugünkü makalemizde, C# programlama  		dilinde ileri seviye kavramlardan biri olan Temsilcileri(delegates) incelemeye  		başlayacağız. Temsilciler ileri seviye bir kavram olmasına rağmen, her seviyden  		C# programcısının bilmesi gereken unsurlardandır. Uygulamalarımızı temsilciler  		olmadan da geliştirebiliriz. Ancak bu durumda, yapamıyacaklarımız,  		yapabileceklerimizin önüne geçecektir. Diğer yandan temsilcilerin kullanımını  		gördükçe bize getireceği avantajları daha iyi [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Bugünkü makalemizde, C# programlama  		dilinde ileri seviye kavramlardan biri olan Temsilcileri(delegates) incelemeye  		başlayacağız. Temsilciler ileri seviye bir kavram olmasına rağmen, her seviyden  		C# programcısının bilmesi gereken unsurlardandır. Uygulamalarımızı temsilciler  		olmadan da geliştirebiliriz. Ancak bu durumda, yapamıyacaklarımız,  		yapabileceklerimizin önüne geçecektir. Diğer yandan temsilcilerin kullanımını  		gördükçe bize getireceği avantajları daha iyi anlayacağımız kanısındayım. Bu  		makalemizde temsilcileri en basit haliyle anlamaya çalışıcağız.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Temsilci (delegate), program içerisinde  		bir veya daha fazla metodu gösteren(işaret eden), referans türünden bir  		nesnedir. Programlarımızda temsilciler kullanmak istediğimizde, öncelikle bu  		temsilcinin tanımını yaparız. Temsilci tanımları, arayüzlerdeki metod  		tanımlamaları ile neredeyse aynıdır. Tek fark delegate anahtar sözcüğünün yer  		almasıdır. Bununla birlikte, bir temsilci tanımlandığında, aslında işaret  		edebileceği metod(ların) imzalarınıda belirlemiş olur. Dolayısıyla, bir  		temsilciyi sadece tanımladığı metod imzasına uygun metodlar için  		kullanabiliceğimizi söyleyebiliriz. Temsilci tanımları tasarım zamanında  		yapılır. Bir temsilciyi, bir metodu işaret etmesi için kullanmak istediğimizde  		ise, çalışma zamanında onu new yapılandırıcısı ile oluşturur ve işaret etmesini  		istediğimiz metodu ona parametre olarak veririz. Bir temsilci tanımı genel  		haliyle, aşağıdaki şekildeki gibidir.</font></font></p>
<p><span id="more-388"></span></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana"><font size="2"><font stylex="FONT-SIZE: 9pt; FONT-stylex: italic"><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk43_1.gif" id="IMG2" border="0" height="201" width="654" /><br />
</font><font stylex="FONT-SIZE: 9pt; FONT-stylex: italic">Şekil 1. Temsilci  				tanımlaması.</font></font></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Şekildende görüldüğü gibi, temsilciler  		aslında bir metod tanımlarlar fakat bunu uygulamazlar. İşte bu özellikleri ile  		arayüzlerdeki metod tanılamalarına benzerler. Uygulamalarımızda, temsilci  		nesneleri ile göstermek yani işaret etmek istediğimiz metodlar bu imzaya sahip  		olmalıdır. Bildiğiniz gibi metod imzaları, metodun geri dönüş tipi ve aldığı  		parametreler ile belirlenmektedir.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Bir temsilcinin tanımlanması, onu  		kullanmak için yeterli değildir elbette. Herşeyden önce bir amacımız olmalıdır.  		Bir temsilciyi çalışma zamanında oluşturabiliriz ve kullanabiliriz. Bir  		temsilci sadece bir tek metodu işaret edebileceği gibi, birden fazla metod için  		tanımlanmış ve oluşturulmuş temsilcileride kullanabiliriz. Diğer yandan, tek  		bir temsilcide birden fazla temsilciyi toplayarak bu temsilcilerin işaret  		ettiği, tüm metodları tek bir seferde çalıştırma lüksünede sahibizdir. Ancak  		temsilciler gerçek anlamda iki amaçla kullanılırlar. Bunlardan birincisi  		olaylardır(events). Diğer yandan, bugünkü makalemizde işleyeceğimiz gibi, bir  		metodun çalışma zamanında, hangi metodların çalıştırılacağına karar vermesi  		gerektiği durumlarda kullanırız. Elbette bahsetmiş olduğumuz bu amacı,  		herhangibir temsilye ihtiyaç duymadan da gerçekleştirebiliriz. Ancak  		temsilcileri kullanmadığımızda, bize sağladığı üstün programlama tekniği,  		kullanım kolaylığı ve artan verimliliğide göz ardı etmiş oluruz. </font> </font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Şimdi dilerseniz bahsetmiş olduğumuz bu  		amaçla ilgili bir örnek verelim ve konuyu daha iyi kavramaya çalışalım.  		Örneğin, personelimizin yapmış olduğu satış tutarlarına göre, prim hesabı yapan  		ve ilgili yerlere bu değişiklikleri yazan bir projemiz olsun. Burada primlerin  		hesaplanması için değişik katsayılar, yapılan satışın tutarına göre belirlenmiş  		olabilir. Örneğin bu oranlar düşük, orta ve yüksek olarak tanımlanmış olsun.  		Personel hangi gruba giriyorsa, metodumuz ona uygun metodu çağırsın. İşte bu  		durumda karar verici metodumuz, çalıştırabileceği metodları temsil eden  		temsilci nesnelerini parametre olarak alır. Yani, çalışma zamanında ilgili  		metodlar için temsilci nesneleri oluşturulur ve karar verici metoda , hangi  		metod çalıştırılacak ise onun temsilcisi gönderilir. Böylece uygulamamız  		çalıştığında, tek yapmamız gereken hangi metodun çalıştırılması isteniyorsa, bu  		metoda ilişkin temsilcinin, karar verici metoda gönderilmesi olacaktır.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Oldukça karışık görünüyor. Ancak  		örnekleri yazdıkça daha iyi kavrayacağınıza inanıyorum. Şimdiki örneğimizde,  		temsilcilerin tasarım zamanında nasıl tanımlandığını, çalışma zamanında nasıl  		oluşturulduklarını ve karar verici bir metod için temsilcilerin nasıl  		kullanılacağını incelemeye çalışacağız.</font></font></p>
<table id="AutoNumber1" bgcolor="#fee0a9" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font face="Verdana"><font size="2"><font color="#0000ff">using</font> System;</p>
<p><font color="#0000ff">namespace </font></font></font><font face="Verdana" size="2"> 				Delegates1<br />
</font><font face="Verdana" size="2">{<br />
</font><font face="Verdana"><font size="2"><font color="#0000ff"> public</font> 					<font color="#0000ff">class</font> Calistir<br />
</font></font><font face="Verdana" size="2">{<br />
</font><font face="Verdana"><font size="2"><font color="#0000ff">         						public</font> <font color="#0000ff">static</font> <font color="#0000ff">int</font> 					a;<br />
<font color="#0000ff">public</font> <font color="#0000ff"> 						delegate</font> <font color="#0000ff">void</font> temcilci(<font color="#0000ff">int</font> 					deger); <font color="#008000">/* Temsilci tanımlamamızı yapıyoruz. Aynı zamanda  						temsilcimiz , değer döndürmeyen ve integer tipte tek bir parametre alan bir  						metod tanımlıyor. Temsilcimizin adı ise temsilci.*/</font> </font></font><font color="#008000"><font face="Verdana" size="2">        *  						Şimdi bu temsilciyi kullacanak bir metod yazıyoruz. İşte karar verici metodumuz  						budur. Dikkat ederseniz metodumuz parametre olarak, temsilci nesnemiz tipinden  						bir temsilci(Delegate) alıyor. Daha sonra metod bloğu içinde, parametre olarak  						geçirilen bu temsilcinin işaret ettiği metod çağırılıyor ve bu metoda parametre  						olarak integer tipte bir değer geçiriliyor. Kısaca, metod içinden, temsilcinin  						işaret ettiği metod çağırılıyor. Burada, temsilci tanımına uygun olan metodun  						çağırılması garanti altına alınmıştır. Yani, programın çalışması sırasında, new  						yapılandırıcısı kulllanarak oluşturacağımız bir temsilci(delegate), kendi metod  						tanımı ile uyuşmayan bir metod için yaratılmaya çalışıldığında bir derleyici  						hatası alacağızdır. Dolayısıyla bu, temsilcilerin yüksek güvenlikli işaretçiler  						olmasını sağlar. Bu , temsilcileri, C++ dilindeki benzeri olan işaretçilerden  						ayıran en önemli özelliktir. */</p>
<p></font></font><font face="Verdana"><font size="2"><font color="#0000ff">         							public</font> <font color="#0000ff">void</font> Metod1(Calistir.temcilci t)<br />
</font></font><font face="Verdana" size="2">         					{<br />
</font><font face="Verdana" size="2">             					t(a);<br />
</font><font face="Verdana" size="2">}<br />
</font><font face="Verdana" size="2">    }</p>
<p></font><font face="Verdana"><font size="2"><font color="#0000ff">class</font> 						Class1<br />
</font></font><font face="Verdana"><font size="2">    {</p>
<p><font color="#008000">        /* IkıKat ve UcKat  							isimli metodlarımız, temsilcimizin programın çalışması sırasında işaret  							etmesini istediğimiz metodlar. Bu nedenle imzaları, temsilci tanımımızdaki  							metod imzası ile aynıdır. */</font></font></font></p>
<p><font face="Verdana"><font size="2"><font color="#0000ff">         							public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> 						IkiKat(<font color="#0000ff">int</font> sayi)<br />
</font></font><font face="Verdana" size="2">         					{<br />
</font><font face="Verdana" size="2">             					sayi=sayi*2;<br />
</font><font face="Verdana" size="2">             					Console.WriteLine(&#8221;IkiKat isimli metodun temsilcisi tarafindan  					çagirildi.&#8221;+sayi.ToString());<br />
</font><font face="Verdana" size="2">        }</p>
<p></font><font face="Verdana"><font size="2"><font color="#0000ff">         							public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> 						UcKat(<font color="#0000ff">int</font> sayi)<br />
</font></font><font face="Verdana" size="2">         					{<br />
</font><font face="Verdana" size="2">             					sayi=sayi*3;<br />
</font><font face="Verdana" size="2">             					Console.WriteLine(&#8221;UcKat isimli metodun temsilcisi tarafindan  					çagirildi.&#8221;+sayi.ToString());<br />
} </font></p>
<p><font face="Verdana"><font size="2"><font color="#0000ff">         							static</font> <font color="#0000ff">void</font> Main(<font color="#0000ff">string</font>[]  						args)<br />
{</font></font></p>
<p><font face="Verdana"><font size="2"><font color="#008000">             							/* Temsilci nesnelerimiz ilgili metodlar için oluşturuluyor. Burada, new  							yapılandırıcısı ile oluşturulan temsilci nesneleri parametre olarak, işaret  							edecekleri metodun ismini alıyorlar. Bu noktadan itibaren t1 isimli delegate  							nesnemiz IkiKat isimli metodu, t2 isimli delegate nesnemizde UcKat isimli  							metodu işaret ediceklerdir. */</p>
<p></font>                 						Calistir.temcilci t1=<font color="#0000ff">new</font> Delegates1.Calistir.temcilci(IkiKat);</font></font></p>
<p><font face="Verdana" size="2">                Calistir.temcilci  					t2=<font color="#0000ff">new</font> Delegates1.Calistir.temcilci(UcKat);</font></p>
<p><font face="Verdana" size="2"> 				 			</font><font face="Verdana" size="2">                Console.WriteLine(&#8221;1  					ile 20 arası değer girin&#8221;);</font></p>
<p><font face="Verdana" size="2">                Calistir.a=System.Convert.ToInt32(Console.ReadLine());</font></p>
<p><font face="Verdana" size="2">                Calistir  					c= <font color="#0000ff">new</font> Calistir();</font></p>
<p><font color="#008000"><font face="Verdana" size="2">                /*  						Kullanıcının Console penceresinden girdiği değer göre, Calistir sınıfının a  						isimli integer tipteki değerini 10 ile karşılaştırılıyor. 10 dan büyükse, karar  						verici metodumuza t1 temsilcisi gönderiliyor. Bu durumda Metod1 isimli karar  						verici metodumuz, kendi kod bloğu içinde t1 delegate nesnesinin temsil ettiği  						IkıKat metodunu, Calistir.a değişkeni ile çağırıyor. Aynı işlem tarzı t2  						delegate nesnesi içinde geçerli.*/</font></font></p>
<p><font color="#008000">			</font><font face="Verdana" size="2">                  				</font><font face="Verdana"><font size="2"><font color="#0000ff">if</font>(Calistir.a&gt;=10)<br />
</font></font><font face="Verdana" size="2">                 					{<br />
</font><font face="Verdana" size="2">c.Metod1(t1);<br />
</font><font face="Verdana" size="2">                 					}<br />
</font><font color="#0000ff"><font face="Verdana" size="2">else<br />
</font></font><font face="Verdana" size="2">{<br />
</font><font face="Verdana" size="2">                    c.Metod1(t2);<br />
</font><font face="Verdana" size="2">                 					}<br />
</font><font face="Verdana" size="2">             					}<br />
</font><font face="Verdana" size="2">        }<br />
s} </font></td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Uygulamamızı çalıştıralım ve bir değer  		girelim.</p>
<p></font><font face="Verdana"><font size="2"><em><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk43_2.gif" border="0" height="127" width="549" /><br />
</em><em>Şekil 2. Programın çalışmasının sonucu.</em> </font></font> </font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Bu basit örnek ile umarım temsilciler  		hakkında biraz olsun bilgi sahibi olmuşsunuzdur. Şimdi temsilciler ile ilgili  		kavramlarımıza devam edelim. Yukarıdaki örneğimiz ışığında temsilcileri  		programlarımızda temel olarak nasıl kullandığımızı aşağıdaki şekil ile daha  		kolay anlayabileceğimizi sanıyorum.</p>
<p></font><font face="Verdana"><font size="2"><em><img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk43_3.gif" border="0" height="429" width="492" /><br />
</em><em>Şekil 3. Temsilcilerin Karar Verici metodlar ile kullanımı.</em></font></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Yukarıdaki örneğimizde, her bir metod  		için tek bir temsilci tanımladık ve temsilcileri teker teker çağırdık. Bu  		Single-Cast olarak adlandırılmaktadır. Ancak programlarımız da bazen, tek bir  		temsilciye birden fazla temsilci ekleyerek, birden fazla metodu tek bir  		temsilci ile çalıştırmak isteyebiliriz. Bu durumda Multi-Cast temsilciler  		tanımlarız. Şimdi multi-cast temsilciler ile ilgili bir örnek yapalım. Bu  		örneğimizde t1 isimli temsilcimiz, multi-cast temsilcimiz olucak.</font></font></p>
<table id="AutoNumber2" bgcolor="#fee0a9" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font face="Verdana"><font size="2"><font color="#0000ff">using</font> System;<br />
<font color="#0000ff">namespace </font></font></font><font face="Verdana" size="2"> 					Delegates2<br />
</font><font face="Verdana" size="2">{<br />
</font><font face="Verdana"><font size="2"><font color="#0000ff">      							public</font> <font color="#0000ff">class</font> temsilciler<br />
</font></font><font size="2"><font face="Verdana"><font color="#0000ff">     						</font>{<br />
</font><font face="Verdana"><font color="#0000ff"><font color="#0000ff">     <font color="#0000ff">     </font></font>public</font> 						<font color="#0000ff">delegate</font> <font color="#0000ff">void</font> dgTemsilci(); 					</font></font><font color="#008000"><font face="Verdana" size="2">/* Temsilcimiz  						tanımlanıyor. Geri dönüş değeri olmayan ve parametre almayan metodları temsil  						edebilir. */<br />
</font><font color="#0000ff"><br />
<font face="Verdana"><font size="2">     <font color="#0000ff">     								</font></font></font></font></font><font color="#008000"><font face="Verdana"> 						<font size="2">/* Metod1, Metod2 ve Metod3 temsilcilerimizin işaret etmesini  							istediğimiz metodlar olucaktır.*/<br />
<font color="#0000ff">     <font color="#0000ff">     								</font></font></font></font></font><font face="Verdana"><font size="2"><font color="#0000ff"> 							public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> 						Metod1()<br />
<font color="#0000ff">     <font color="#0000ff">     							</font></font></font></font><font face="Verdana" size="2">{<br />
</font><font face="Verdana"><font size="2"><font color="#0000ff">     <font color="#0000ff">     <font color="#0000ff">     </font></font></font>Console.WriteLine(&#8221;Metod  						1 çalıştırıldı.&#8221;);<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff">     <font color="#0000ff">     							</font></font>}<br />
<font color="#0000ff">     </font><br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff"><font color="#0000ff"> 								     <font color="#0000ff">     </font> 							</font>public</font> <font color="#0000ff">static</font> <font color="#0000ff">void</font> 						Metod2()<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff">     <font color="#0000ff">     							</font></font>{<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff">     <font color="#0000ff">     <font color="#0000ff">     								</font></font></font>Console.WriteLine(&#8221;PI değeri 3.14 alınsın&#8221;);<br />
<font color="#0000ff">     <font color="#0000ff">     							</font></font>}</font></font></p>
<p><font face="Verdana"><font size="2"><font color="#0000ff">          public</font> 						<font color="#0000ff">static</font> <font color="#0000ff">void</font> Metod3()<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff">     <font color="#0000ff">     							</font></font>{<br />
<font color="#0000ff">     <font color="#0000ff">     <font color="#0000ff">     								</font></font></font></font></font><font face="Verdana" size="2">Console.WriteLine(&#8221;Mail  					gönderildi&#8230;&#8221;);<br />
<font color="#0000ff">     <font color="#0000ff">     						</font></font>} </font></p>
<p><font face="Verdana" size="2"> 				 			</font><font color="#008000"><font face="Verdana" size="2">          /*  						Temsilcilerimizi çalıştıran metodumuz. Parametre olarak gönderilen temsilciyi,  						dolayısıyla bu temsilcinin işaret ettiği metodu alıyor. */</font></font></p>
<p><font color="#008000">			</font><font face="Verdana"><font size="2"><font color="#0000ff">          public</font> 						<font color="#0000ff">static</font> <font color="#0000ff">void</font> TemsilciCalistir(temsilciler.dgTemsilci  						dt)<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff">     <font color="#0000ff">     							</font></font>{<br />
<font color="#0000ff">     <font color="#0000ff">     <font color="#0000ff">     								</font></font></font>dt(); </font></font><font color="#008000"><font face="Verdana"> 						<font size="2">/* Temsilcinin işaret ettiği metod çalıştırılıyor.*<br />
<font color="#0000ff">     <font color="#0000ff">     								</font></font></font></font></font><font face="Verdana" size="2">}<br />
</font><font face="Verdana"><font size="2"><font color="#0000ff">     </font> 						}<br />
<font color="#0000ff">     </font><br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff"><font color="#0000ff"> 								     </font>class</font> Class1<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff">     						</font>{<br />
</font></font><font face="Verdana"><font size="2"><font color="#0000ff"><font color="#0000ff"> 								     <font color="#0000ff">     </font> 							</font>static</font> <font color="#0000ff">void</font> Main(<font color="#0000ff">string</font>[]  						args)<br />
</font></font><font face="Verdana" size="2">           					{<br />
<font color="#008000">                						/* Üç metodumuz içinde temsilci nesnelerimiz oluşturuluyor .*/</font> </font></p>
<p><font face="Verdana" size="2">                     					temsilciler.dgTemsilci t1=<font color="#0000ff">new</font> Delegates2.temsilciler.dgTemsilci(temsilciler.Metod1);</font></p>
<p><font face="Verdana" size="2">                    temsilciler.dgTemsilci  					t2=<font color="#0000ff">new</font> Delegates2.temsilciler.dgTemsilci(temsilciler.Metod2);</font></p>
<p><font face="Verdana" size="2">                    temsilciler.dgTemsilci  					t3=<font color="#0000ff">new</font> Delegates2.temsilciler.dgTemsilci(temsilciler.Metod3);</font></p>
<p><font face="Verdana" size="2">                    Console.WriteLine(&#8221;sadece  					t1&#8243;);</font></p>
<p><font face="Verdana" size="2">                    temsilciler.TemsilciCalistir(t1);</font></p>
<p><font face="Verdana" size="2">                    Console.WriteLine(&#8221;&#8212;&#8221;);</font></p>
<p><font face="Verdana" size="2"> 				 			</font><font color="#008000"><font face="Verdana" size="2">                                     						/* Burada t1 temsilcimize, t2 temsilcisi ekleniyor. Bu durumda, t1 temsilcimiz  						hem kendi metodunu hemde, t2 temsilcisinin işaret ettiği metodu işaret etmeye  						başlıyor. Bu halde iken TemsilciCalistir metodumuza t1 temsilcisini göndermemiz  						her iki temsilcinin işaret ettiği metodların çalıştırılmasına neden oluyor.*/</font></font></p>
<p><font color="#008000">			</font><font face="Verdana" size="2">                       					t1+=t2;</font></p>
<p><font face="Verdana" size="2"> 				 			</font><font face="Verdana" size="2">                      Console.WriteLine(&#8221;t1  					ve t2&#8243;);</font></p>
<p><font face="Verdana" size="2">                      temsilciler.TemsilciCalistir(t1);</font></p>
<p><font face="Verdana" size="2">                      Console.WriteLine(&#8221;&#8212;&#8221;);</font></p>
<p><font face="Verdana"><font size="2">                      t1+=t3; 						<font color="#008000">/* Şimdi t1 temsilcimiz hem t1, hem t2, hem de t3  				temsilcilerinin işaret ettiği metodları işaret etmiş olucak.*/</font></font></font></p>
<p><font face="Verdana"><font size="2"><font color="#008000">			</font></font></font><font face="Verdana" size="2">                      Console.WriteLine(&#8221;t1,t2  					ve t3&#8243;);</font></p>
<p><font face="Verdana" size="2">                      temsilciler.TemsilciCalistir(t1);</font></p>
<p><font face="Verdana" size="2">                      Console.WriteLine(&#8221;&#8212;&#8221;);</font></p>
<p><font face="Verdana" size="2">                      t1-=t2; 				</font><font face="Verdana"><font size="2"><font color="#008000">/* Burada ise t2 metodunu  							t1 temsilcimizden çıkartıyoruz. Böylece, t1 temsilcimiz sadece t1 ve t3  							temsilcilerini içeriyor. */<br />
</font>                      Console.WriteLine(&#8221;t1  						ve t3&#8243;);</font></font></p>
<p><font face="Verdana" size="2">                      temsilciler.TemsilciCalistir(t1);</font></p>
<p><font face="Verdana" size="2">                      Console.WriteLine(&#8221;&#8212;&#8221;);<br />
</font><font face="Verdana" size="2">                					}<br />
</font><font face="Verdana" size="2">           					}<br />
} </font></td>
</tr>
</table>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana" size="2">Uygulamamızı çalıştırdığımızda aşağıdaki  		sonucu elde ederiz.</p>
<p></font><font face="Verdana"><font size="2"><font stylex="FONT-SIZE: 9pt; FONT-stylex: italic"> 				<img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk43_4.gif" id="IMG1" border="0" height="283" width="341" /><br />
</font><font stylex="FONT-SIZE: 9pt; FONT-stylex: italic">Şekil 4. Multi-Cast  				temsilciler.</font></font></font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/temsilcidelegate-kavramina-giris.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Web Servisleri ile Dosya Transferi Yapmak</title>
		<link>http://www.netanlatim.com/web-servisleri-ile-dosya-transferi-yapmak.html</link>
		<comments>http://www.netanlatim.com/web-servisleri-ile-dosya-transferi-yapmak.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:46:59 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[Dosya Transferi Yapmak]]></category>

		<category><![CDATA[transfer yapmak]]></category>

		<category><![CDATA[Web Servisleri]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/web-servisleri-ile-dosya-transferi-yapmak.html</guid>
		<description><![CDATA[Bu    yazımda sizlere Xml Web Servisleri ve ASPdotNET ile basit bir dosya transfer    uygulamasi yapmaya çalışacağız. İşe veritabanımızı oluşturmayla başlayalım :
1- ) SQL server da CsharpNedir adinda yeni bir veritabani olusturalim.
2- ) Olusturdugumuz bu veritabaninda ;

Yukardaki    şekilde bir tablo oluşturduktan sonra Kayıt etme işlemi için aşağıdaki [...]]]></description>
			<content:encoded><![CDATA[<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Bu    yazımda sizlere Xml Web Servisleri ve ASPdotNET ile basit bir dosya transfer    uygulamasi yapmaya çalışacağız. İşe veritabanımızı oluşturmayla başlayalım :</p>
<p>1- ) SQL server da CsharpNedir adinda yeni bir veritabani olusturalim.<br />
2- ) Olusturdugumuz bu veritabaninda ;</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><img src="http://www.csharpnedir.com/Mimages/eray_webservis_1.jpg" height="136" width="508" /></font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Yukardaki    şekilde bir tablo oluşturduktan sonra Kayıt etme işlemi için aşağıdaki    Stored Procedure&#8217;umuzu yazalım </font></font></p>
<p><span id="more-387"></span></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">3-)<br />
</font></font></p>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td bgcolor="#ffcc66"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">CREATE        Procedure sp_DosyaYukle<br />
(<br />
@Adi nvarchar(100),<br />
@Turu nvarchar(50),<br />
@Boyut int,<br />
@Dosya image<br />
)<br />
AS<br />
INSERT INTO tbl_Dosya(Adi,Turu,Boyut,Dosya)<br />
VALUES (@Adi,@Turu,@Boyut,@Dosya)<br />
GO </font></td>
</tr>
</table>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Yukardaki    saklı yordamda ikkat ettiyseniz Tarih alanını yazmadım çünkü    zaten kayit eklendiğinde mevcut bir tarih girilceği için yani her kayıtta    bunu tabloyu olustururken varsayilan(default) değer olarak getdate() fonksiyonunu    yazdim. Böylece program içinde ikinci bir defa kayıt etme işlemi    ile uğraşmak zorunda kalmayacağım.</p>
<p>Yukardaki şekilde veritabanımız oluşturduktan sonra sıra web servisimizi yazmaya    geldi. VS.NET editörümüzde C# dili ile bir web servisi projesi    açalım. Projemizin adini CsharpNedir olarak verelim; </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Daha    sonra sql server sunucusuna erişim yapabilmek için web.config dosyasında    tanımladığımız baglantı cümlesi anahtar kelimesine erişim yapabilmek için.    </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>using    </strong>System.Configuration</p>
<p>isimuzayını(namespace) ve sql server üzerine islem yapabilmek için    ise<br />
<strong><br />
using </strong>System.Data.SqlClient</p>
<p>isimuzayını(namespace) ini referans olarak belirleyelim. </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Şimdi    veritabanina kayit eklemek için kullanacağımız metodumuzu yazalım.<br />
</font></font></p>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td bgcolor="#ffcc66"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">[WebMethod(Description=&#8221;Veritabanina        dosya yükleme yapabileceğiniz metod.&#8221;)]<br />
<font color="#0000ff">public string</font> DosyaYukle(<font color="#0000ff">string</font>        Adi,string Turu,<font color="#0000ff">int</font> Boyut,<font color="#0000ff">byte</font>[]        Dosya)<br />
{<br />
<font color="#0000ff">string</font> IslemSonucu        = <font color="#0000ff">string</font>.Empty;<br />
SqlConnection baglanti = <font color="#0000ff">new</font>        SqlConnection(strCon);<br />
SqlCommand komut = <font color="#0000ff">new</font>        SqlCommand();<br />
komut.CommandText = &#8220;sp_DosyaYukle&#8221;;<br />
komut.CommandType = CommandType.StoredProcedure;<br />
komut.Connection = baglanti;</p>
<p>baglanti.Open();</p>
<p><font color="#0000ff"> #region</font> sqlparametre        lerin doldurulmasi</p>
<p>komut.Parameters.Add(new SqlParameter(&#8221;@Adi&#8221;        ,SqlDbType.NVarChar,100<br />
ParameterDirection.Input,false,0,0,&#8221;",DataRowVersion.Proposed,Adi));</p>
<p>komut.Parameters.Add(new SqlParameter(&#8221;@Turu&#8221;        ,SqlDbType.NVarChar,50<br />
ParameterDirection.Input,false,0,0,&#8221;",DataRowVersion.Proposed,Turu));</p>
<p>komut.Parameters.Add(new SqlParameter(&#8221;@Boyut&#8221;        ,SqlDbType.Int,4<br />
ParameterDirection.Input,false,0,0,&#8221;",DataRowVersion.Proposed,Boyut));</p>
<p>komut.Parameters.Add(new SqlParameter(&#8221;@Dosya&#8221;        ,SqlDbType.Image,16<br />
ParameterDirection.Input,false,0,0,&#8221;",DataRowVersion.Proposed,Dosya));</p>
<p><font color="#0000ff">#endregion </font></p>
<p><font color="#0000ff">try</font><br />
{<br />
komut.ExecuteNonQuery();<br />
baglanti.Close();</p>
<p><font color="#0000ff">return</font>        IslemSonucu = &#8220;Kayit yapilmistir&#8221;;<br />
}<br />
catch(Exception ex)<br />
{<br />
<font color="#0000ff">return</font>        IslemSonucu = &#8220;Hata olustur : &#8221; + ex.Message;<br />
}<br />
}</font></td>
</tr>
</table>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><br />
Yukaridaki fonksiyon ile veritabanına kayıt yapıldı veya yapılmadıysa olusan    hatayı string olarak göndürebilmesi için string türünde    tanımladım. Niçin string olarak tanımladığımı konumuzun ilerleyen bölümünde    açıklayacağım. Simdi metodumuzu inceleyelim. Veritabanımıza yükleyecegimiz    dosyamızın adını, türünü, boyutunu ve dosyamızı kayıt edebilceğimiz    parametrelerimizi yazdık. Daha sonra fonksiyon içinde sqlconnection sınıfından    bir baglantı nesnesi kurduk daha sonra sqlcommand ile veritabanımızda belirttiğimiz    bir storedprocedure&#8217;u işlem yapabilmek için</p>
<p><strong>komut.CommandText = &#8220;sp_DosyaYukle&#8221;;<br />
komut.CommandType = CommandType.StoredProcedure;<br />
komut.Connection = baglanti; </strong></p>
<p>Yukarıdaki SqlCommand nesnemizden türettigimiz komut nesnemizin CommandText    özelliğine kullanmak istediğimiz stored procedure&#8217;umuzun adını, CommandType    özelligine ise StoredProcedure, Text veya TableDirect türünü    belirtiyoruz. Biz StoredProcedure kullandığımiz için StoredProcedure    seçeneğini kullandık. </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Ve    kayıt işlemlerimizi yapmak için komut nesnemize parametre olarak alanlarımızı    ve değerlerimizi yazıyoruz. Kayıt etme fonksiyonumuz bittikten sonra bilgileri    görmek için geriye dataset döndürecek bir fonksiyon daha    yazıyoruz.</p>
<p></font></font></p>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td bgcolor="#ffcc66"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">[WebMethod(Description        = &#8220;Kaydettiginizi veritabanina eklediginiz verileri dataset olarak        islem yapabilirsiniz&#8221;)]<br />
<font color="#0000ff">public</font> DataSet DosyaGoster()<br />
{<br />
SqlConnection baglanti = <font color="#0000ff">new</font>        SqlConnection(strCon);<br />
baglanti.Open();<br />
SqlDataAdapter dataadapter = <font color="#0000ff">new</font>        SqlDataAdapter(&#8221;SELECT Adi,Boyut,Tarih FROM tbl_Dosya&#8221;,baglanti);<br />
DataSet dset = <font color="#0000ff">new</font>        DataSet(&#8221;tbl_Dosya&#8221;);<br />
dataadapter.Fill(dset,&#8221;tbl_Dosya&#8221;);<br />
baglanti.Close();<br />
<font color="#0000ff">return</font> dset;<br />
} </font></td>
</tr>
</table>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><img src="http://www.csharpnedir.com/Mimages/eray_webservis_1.gif" height="387" width="617" /><br />
Şekil � 1 </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Yukarıdaki    metod ile tbl_Dosya tablosundaki tüm kayitlari dset dataset nesnemize yüklüyoruz.    Bu şekilde servisimiz bittikten sonra(Sekil - 1) projemize bir adet asp.net    projesi ekleyelim. Projemizin adını CsharpNedirWebUI olarak belirleyelim.</p>
<p>Sayfa üzerinde kullanacağımız kontroller;</p>
<p>1 � 1 adet Label nesnesi<br />
2 � 1 adet HtmlFile nesnesi<br />
3 � 1 adet Buton nesnesi </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">4    � 1 adet Datagrid nesnesi (Sekil � 2 )</p>
<p><img src="http://www.csharpnedir.com/Mimages/eray_webservis_2.gif" height="404" width="502" /><br />
Şekil � 2 </font></font></p>
<p class="style1" align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Yukarıdaki    gibi nesnelerimizi form üzerine yerleştiriyoruz. Daha sonra projemize Solution    explorer penceresinden Add WebReferance diyerek web servisimizi referans veriyoruz.    (Şekil � 3)</p>
<p><img src="http://www.csharpnedir.com/Mimages/eray_webservis_3.gif" height="300" width="678" /><br />
Şekil � 3 </font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Yukaridaki    şekilde işaretlemiş oldugum yerlerde ilk önce CsharpNedirWebUI projemize    Add WebReferance veriyoruz ben <em>CsharpNedirWebServisi </em>oalrak verdim    daha sonra 2. seçenek te ise bu servisi proje içinde kullanabilmek    için projemin adi �.� Referans verdiğim servisin adı şeklinde referans    veriyorum yani<br />
<strong><br />
using </strong> CsharpNedirWebUI.CsharpNedirWebServisi;</p>
<p>şeklinde verdikten sonra;</p>
<p>proje içinde Servise erişim yapabilmek için</p>
<p><strong>private DosyaTransferServisi servisim = null ; </strong></p>
<p>şeklinde sayfa içinde her yerde kullanılabilir türde servisim nesnesini    tanımlıyoruz.</p>
<p>Sayfa içinde kullanılacak Alert metodu için ;<br />
</font></font></p>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td bgcolor="#ffcc66">
<p class="style1"><font color="#0000ff" face="Verdana, Arial, Helvetica, sans-serif" size="2">public          void</font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">          Alert(<font color="#0000ff">string</font> text)<br />
{<br />
AddStartupScript(&#8221;OnClick&#8221;, &#8220;alert(\&#8221;"          + text + &#8220;\&#8221;);&#8221;);<br />
} </font></p>
<p class="style1"><font color="#0000ff" face="Verdana, Arial, Helvetica, sans-serif" size="2">private          void</font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">          AddStartupScript(<font color="#0000ff">string</font> name, <font color="#0000ff">string</font>          script)<br />
{<br />
script = &#8220;<script language="javascript">"          + script + "</script>&#8220;;<br />
<font color="#0000ff">this</font>.Page.RegisterStartupScript(name,          script);<br />
} </font></td>
</tr>
</table>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Servisimizde    kayıt ekleme fonksiyonunu string olarak tanımlamamdaki sebep proje içinde    bu servisi kullanırken bir alert ile veya messagebox ile geriye sonucu uyarı    seklinde göstermesini saglamaktı.</p>
<p>Şimdi kaydet butonuna tıkladığımızda yazacağımız servisimize gidecek parametrelerimizi    yazalım;<br />
</font></font></p>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td bgcolor="#ffcc66">
<p class="style1"><font color="#0000ff" face="Verdana, Arial, Helvetica, sans-serif" size="2">private          void </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">btnKaydet_Click(<font color="#0000ff">object</font>          sender, System.EventArgs e)<br />
{<br />
servisim = <font color="#0000ff">new</font>          DosyaTransferServisi(); </font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    <font color="#0000ff">           if</font>(flDosya.PostedFile != <font color="#0000ff">null</font>)<br />
{<br />
HttpPostedFile          dosyalar = flDosya.PostedFile;</p>
<p><font color="#0000ff">string</font>          dosyaAdi = dosyalar.FileName;<br />
<font color="#0000ff">string</font>          turu = dosyalar.ContentType;<br />
<font color="#0000ff">int</font>          boyut = dosyalar.ContentLength;<br />
<font color="#0000ff">byte</font>[]          dosya =<font color="#0000ff">new</font></font> <font color="#0000ff" face="Verdana, Arial, Helvetica, sans-serif" size="2">byte</font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">[boyut];          </font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">                     dosyalar.InputStream.Read(dosya,0,boyut);          </font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">                     <font color="#0000ff">string</font> sonuc          = servisim.DosyaYukle(System.IO.Path.GetFileName(dosyaAdi),turu,boyut,dosya);          </font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">                     Alert(sonuc);<br />
}<br />
} </font></td>
</tr>
</table>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">    Yukarıdaki metodumuzu yazdığımızda servisim.DosyaYukle fonksiyonuna flDosya    nesnesinden seçtigimiz dosyanın, Adi,Tipi,Boyutu ve Dosya olarak belirttiğim    değişkenlere atayarak bunu servis fonksiyonuna gönderiyorum. Gönderme    işlemi sırasında servis işleniyor ve geriye dönebilecek iki sonuç string    olarak tanımladığım değişkenime geliyor. Daha sonra bu sonuç değişkenini Alert    metodunda kullanarak &#8220;kayıt edildi&#8221; veya &#8220;kayıt edilmedi&#8221;    şeklinde bir uyarı alıyorum.</p>
<p></font></font></p>
<p class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Yazım    burada bitmiştir. Kısaca ne yaptığımızı açıklayacak olursak;</p>
<p><strong>1- )</strong> Web servislerini her yerde kullanabilirsiniz. </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>2-    )</strong> Web servislerine windows uygulamalarından erişim yaparken varsayılan olarak    httpGet ve httpPost metodları kapalı olarak gelir. Bunu aşmanın yolu web.config    dosyasında</p>
<p>&lt;system.web&gt;<br />
&lt;webServices&gt;<br />
&lt;protocols&gt;<br />
&lt;add name=&#8221;HttpPost&#8221;/&gt;<br />
&lt;add name=&#8221;HttpGet&#8221;/&gt;<br />
&lt;/protocols&gt;<br />
&lt;/webServices&gt;<br />
&lt;/system.web&gt;</p>
<p>tanımlamasını yapmamız gerekiyor ama microsoft bunu tavsiye etmiyor. </font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/web-servisleri-ile-dosya-transferi-yapmak.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>.NET Veri Sağlayıcıları (Data Providers)</title>
		<link>http://www.netanlatim.com/net-veri-saglayicilari-data-providers.html</link>
		<comments>http://www.netanlatim.com/net-veri-saglayicilari-data-providers.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:46:10 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[Programlama]]></category>

		<category><![CDATA[.NET dili]]></category>

		<category><![CDATA[Data Providers]]></category>

		<category><![CDATA[uygulamalar]]></category>

		<category><![CDATA[Veri Sağlayıcıları]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/net-veri-saglayicilari-data-providers.html</guid>
		<description><![CDATA[Bugünkü  makalemiz ile, ADONET &#8216; te yer alan veri sağlayıcılarını inceleyeceğiz. Bildiğiniz  gibi hepimiz uygulamalarımızda yoğun bir şekilde veri kaynaklarını kullanmaktayız.  Normalde sistemimizde, bu veri kaynaklarına erişmek için kullanılan sistem sürücüleri  vardır. Bu sürücüler, sistemimize dll kütüphaneleri olarak yüklenirler ve kendilerini  sisteme kayıt ederler(register). Bu noktadan itibaren bu veri sürücülerinin [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Bugünkü  makalemiz ile, ADONET &#8216; te yer alan veri sağlayıcılarını inceleyeceğiz. Bildiğiniz  gibi hepimiz uygulamalarımızda yoğun bir şekilde veri kaynaklarını kullanmaktayız.  Normalde sistemimizde, bu veri kaynaklarına erişmek için kullanılan sistem sürücüleri  vardır. Bu sürücüler, sistemimize dll kütüphaneleri olarak yüklenirler ve kendilerini  sisteme kayıt ederler(register). Bu noktadan itibaren bu veri sürücülerinin içerdiği  fonksiyonları kullanarak veritabanları üzerinde istediğimiz işlemleri gerçekleştirebiliriz.  Kısaca, bu veri sürücüleri uygulamalarımız ile, veritabanı arasındaki iletişimi  sağlarlar. Sistemizide yüklü olan programlara göre pek çok veri sürücüsüne sahip  olabiliriz. Örneğin ODBC sürücüleri, SQL sürücüleri, Ole Db Jet sürücüleri ve  bazıları. </font> </font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">ADO.NET    ile veritabanı uygulamaları geliştirirken, bu sürücüler üzerinden veritabanlarına    erişim sağlarız. Bu sebeple .Net Framework &#8216;te her bir veri sürücüsü için geliştirilmiş    veri sağlayıcıları (data providers) vardır. Bu veri sağlayıcılarının görevi,    uygulamalarımız ile veri sürücülerini bağlamak ve veri sürücülerindeki ilgili    kütüphane fonksiyonlarını çalıştırarak veriler üzerinde işlem yapabilmemizi    sağlamaktır. .Net Framework&#8217; ün 1.1 sürümü aşağıdaki listede yer alan veri sağlayıcıları    ile birlikte gelmektedir. .Net Framework&#8217;ün ilk sürümlerinde sadece Sql ve Ole    Db veri sağlayıcıları varsayılan olarak yer almaktadır. Ancak 1.1 sürümü ile    birlikte bu veri sağlayıcılarına, Oracle ve ODBC veri sağlayıcılarıda eklenmiştir.</font></font></p>
<p><span id="more-386"></span><br />
<center> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table stylex="border-collapse: collapse" id="AutoNumber1" border="1" bordercolor="#111111" cellpadding="0" cellspacing="0" height="143" width="37%">
<tr>
<td bgcolor="#ffffcc" height="28" width="50%">
<p align="center"> <font stylex="font-size: 10pt; font-weight: 700" face="Verdana, Arial, Helvetica, sans-serif" size="2">.Net            Framework Veri Sağlayıcıları</font></p>
</td>
</tr>
<tr>
<td height="30" width="50%"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">            Data Provider For SQL Server</font></td>
</tr>
<tr>
<td height="26" width="50%"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">            Data Provider For OLE DB</font></td>
</tr>
<tr>
<td height="27" width="50%"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">            Data Provider For ODBC</font></td>
</tr>
<tr>
<td height="28" width="50%"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">            Data Provider For Oracle</font></td>
</tr>
</table>
<p></font></center></p>
<p align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Tablo    1: .NET Veri Sağlayıcıları</em></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Şimdi    dilerseniz, bu veri sağlayıcıları kısaca incelemeye çalışalım.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">SQL    veri sağlayıcısına ait tüm üyeler, System.Data.SQLClient isim uzayında yer almaktadır.    SQL veri sağlayıcısının en önemli özelliği, sql motoruna direkt sql api&#8217;si üzerinden    erişim sağlayabilmesidir. Bu özellik ona diğer veri sağlayıcılarına göre daha    yüksek performans kazandırır. Nitekim sql veri sağlayıcısı, sql server&#8217;a doğrudan    ulaşmak için kendi iletişim protokolü olan TDS(Tabular Data Stream)&#8217;yi kullanmaktadır.    Elbette bu özelliği ile, örneğin SqlDataReader nesnesinin kullanıldığı veri    okuma yöntemlerinde, ole db veri kaynağına göre çok daha hızlı ve verimlidir.    Nitekim aynı sql veri kaynaklarına ole db veri sağlayıcısı ilede erişmemiz mümkündür.    Ama belirttiğimiz gibi performans ve verimlilik bu iki veri kaynağı için oldukça    farklıdır.</p>
<p></font><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><img src="http://www.csharpnedir.com/MImages/bsenyurt/mk44_1.gif" border="0" height="135" width="549" /><br />
</font><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Şekil    1. Sql Veri Sağlayıcımız.</em></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Sql    veri sağlayıcısı, Sql Server&#8217;ın 7 ve daha üstü versiyonlarını desteklemektedir.    Bu nedenle 6.5 versiyonu ve daha öncesi için, Ole Db veri sağlayıcısını kullanmak    zorundayız. Diğer yandan Sql veri sağlayıcısı MDAC(Microsoft Data Access Component)&#8217;ın    2.6 veya üstü sürümünün sistemimizde kurulu olmasını gerektirmektedir. Sql veri    sağlayıcısı, sql server&#8217;ın 7.0 ve sonraki sürümlerinde özellikle çok katlı uygulamalarda    yüksek verim ve performans sağlar.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Ole    Db veri sağlayıcısı, Ole Db desteği veren tüm veri sürücüleri ile ilişki kurabilmektedir.    Bunu yaparken, Ole Db Com nesnelerini kullanır. Aşağıdaki şekilde görüldüğü    gibi, uygulamamızda ole db veri sağlayıcısı kullanarak, bir oledb veri kaynağına    erişmek oldukça maliyetlidir. Bunun yanında ole db&#8217;yi destekleyen çok çeşitli    veri kaynağı sürücülerinin olması ole db nin ürün yelpazesini genişliğini gösterir.</p>
<p></font><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><img src="http://www.csharpnedir.com/MImages/bsenyurt/mk44_2.gif" border="0" height="459" width="403" /><br />
</font><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Şekil    2 . Ole Db Veri Sağlayıcısı</em></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Ole    Db veri sağlayıcısı Ole Db desteği veren her türlü veri sürücüsü ile çalışabilir.    Aşağıda ole db veri sağlayıcısı ile kullanılabilen örnek Ole Db veri sürücüleri    listelenmiştir.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">    <img src="http://www.csharpnedir.com/MImages/bsenyurt/mk44_3.gif" border="0" height="153" width="278" /></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Ole    Db veri sağlayıcısının .net framework üyeleri, System.Data.OleDb isim uzayında    yer alır. Çoğunlulkla bu veri sağlayıcısını Access tablolarına erişmek için    uygulamalarımızda kullanmaktayız. Bununla bilrikte Paradox, dBASE, Excel, FoxPro,Oracle    7.3,Oracle8 gibi veri tablolarınada erişebiliriz. Diğer yandan Oracle sürücülerine    ve ODBC sürücülerinede erişebiliriz. Ancak elbetteki, çok katlı uygulamalarda,    sql veri sağlayıcısını veya oracle veri sağlayıcısını tercih etmemiz daha doğru    olucaktır. Diğer yandan ole db veri sağlayıcısı, com servsileri ile veri sürücülerine    eriştiği için, özellikle sql veri sağlayıcısına göre çok daha düşük bir performans    sergiler. Ole Db veri kaynakları ile çalışan ole db veri sağlayıcısının , özellikle    sql server&#8217;ın 6.5 ve önceki sürümlerinin kullanıldığı tek katlı ve çok katlı    uygulamalarda kullanılması tercih edilir. Bununla birlikte, access tabloları    ile çalışırken, çok katlı mimarilerin, bu veri tabloları üzerinden ole db sağlayıcıları    ile oluşturulması microsoft otoriterlerince tavsiye edilmemektedir.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">ODBC    veri sağlayıcısı, Ole Db veri sağlayıcısı gibi, ODBC desteği veren sürücüler    ile, ODBC Servis Component&#8217;lerini kullanarak iletişim kurar.</p>
<p></font><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><img src="http://www.csharpnedir.com/MImages/bsenyurt/mk44_4.gif" border="0" height="115" width="668" /><br />
</font><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Şekil    3 . ODBC Veri Sağlayıcısı</em></font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">ODBC    veri sağlayıcısı ile ilgili üyeler, .net framework içinde, System.Data.Odbc    isim uzayında yer almaktadır. Aslında bu veri sağlayıcı, .net framework&#8217;ün 1.0    versiyounda yer almamaktaydı. Ancak 1.1 verisyonu ile birlikte ADO.NET &#8216; teki    yerini almıştır. ODBC sürücüsü yardımıyla,sql server&#8217;a, access tablolarına ve    odbc&#8217;yi destekleyen veri srücülerine erişebiliriz. ODBC veri sağlayıcısı, odbc    veri kaynakları üzerinden yapılan tek katlı (single-tier) ve orta katlı(middle-tier)    mimarilerinde kullanılabilir. </font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Oracle    servis sağlayıcısı, .net framework&#8217;ün System.Data.OracleClient isim uzayında    yer alan üyelerden oluşur. Oracle servis sağlayıcısı, oracle veri kaynaklarına    erişebilmek için, sql veri sağlayıcısı gibi kendi iletişim protokünü içeren    Oracle Client Connectivity&#8217;yi kullanır. Oracle veri sağlayıcısının .net&#8217;e yerleştirilmesindeki    temel amaç, oracle veri tabanlarına ole db veri sağlayıcısı ile ole db üzerinden    değil, doğrudan erişilebilmesini sağlamaktır. Bu sayede oracle veri kaynağı    ile oluşturulan etkileşimde en iyi performansın elde edilmesi sağlanmıştır.    Zaten bu yönü ilede oracle veri sağlayıcısı, sql veri sağlayıcısına benzer bir    yapıdadır. Doğal olarak, oracle veri kaynakları üzerinde gerçekleştirilen, çok    katlı ve tek katlı mimarilerde yüksek performans sergilemektedir.</font></font></p>
<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font stylex="font-size: 9pt" face="Verdana, Arial, Helvetica, sans-serif" size="2">Bu    makalemizde .net veri sağlayıcılarına kısaca değinmeye çalıştık. İlerliyen makalelerimiz    ile birlikte ado.net&#8217;in tüm kavramlarını inclemeye çalışacağım. Bir sonraki    makalemde ole db veri sağlayıcısı üyelerinden olan, OleDbConnection nesnesini    incelemeye çalışacağım. Hepinize mutlu günler ve iyi çalışmalar dilerim.</font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/net-veri-saglayicilari-data-providers.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Arayüz(Interface) Kullanımına Giriş</title>
		<link>http://www.netanlatim.com/arayuzinterface-kullanimina-giris.html</link>
		<comments>http://www.netanlatim.com/arayuzinterface-kullanimina-giris.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 12:45:03 +0000</pubDate>
		<dc:creator>jaja</dc:creator>
		
		<category><![CDATA[C# (csharp)]]></category>

		<category><![CDATA[Arayüz]]></category>

		<category><![CDATA[Arayüz Kullanımına Giriş]]></category>

		<category><![CDATA[C# dili]]></category>

		<category><![CDATA[Interface]]></category>

		<category><![CDATA[Programlama]]></category>

		<guid isPermaLink="false">http://www.netanlatim.com/arayuzinterface-kullanimina-giris.html</guid>
		<description><![CDATA[ Bugünkü makalemizde,    nesneye dayalı programlamanın önemli kavramlarından birisi olan arayüzleri incelemeye    çalışacağız. Öncelikle, arayüz&#8217;ün tanımını yapalım. 
Bir arayüz,    başka sınıflar için bir rehberdir. Bu kısa tanımın arkasında, deryalar    gibi bir kavram denizi olduğunu söylemekte yarar buluyorum. Arayüzün ne olduğunu    [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Bugünkü makalemizde,    nesneye dayalı programlamanın önemli kavramlarından birisi olan arayüzleri incelemeye    çalışacağız. Öncelikle, arayüz&#8217;ün tanımını yapalım. </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>Bir arayüz,    başka sınıflar için bir rehberdir.</strong> Bu kısa tanımın arkasında, deryalar    gibi bir kavram denizi olduğunu söylemekte yarar buluyorum. Arayüzün ne olduğunu    tam olarak anlayabilmek için belkide asıl kullanım amacına bakmamız gerekmektedir.    </font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">   </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> C++ programlama    dilinde, sınıflar arasında çok kalıtımlılık söz konusu idi. Yani bir sınıf,    kalıtımsal olarak, birden fazla sınıftan türetilebiliyordu . Ancak bu teknik    bir süre sonra kodların dahada karmaşıklaşmasına ve anlaşılabilirliğin azalmasına    neden oluyordu. Bu sebeten ötürü değerli Microsoft mimarları, C# dilinde, bir    sınıfın sadece tek bir sınıfı kalıtımsal olarak alabileceği kısıtlmasını getirdiler.    <strong>Çok kalıtımlık görevini ise anlaşılması daha kolay arayüzlere bıraktılar.</strong>    İşte arayüzleri kullanmamızın en büyük nedenlerinden birisi budur.</font></font><br />
<span id="more-385"></span><br />
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">	   </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Diğer yandan, uygulamalarımızın    geleceği açısından da arayüzlerin çok kullanışlı olabileceğini söylememiz gerekiyor.    Düşününkü, bir ekip tarafından yazılan ve geliştirilen bir uygulamada görevlisiniz.    Kullandığınız nesnelerin, türetildiği sınıflar zaman içerisinde, gelişen yeniliklere    adapte olabilmek amacıyla, sayısız yeni metoda, özelliğe vb.. sahip olduklarını    farzedin. Bir süre sonra, nesnelerin türetildiği sınıflar içerisinde yer alan    kavram kargaşısını, &#8220;bu neyi yapıyordu?, kime yapıyordu? , ne için yapıyordu?&#8221;    gibi soruların ne kadar çok sorulduğunu düşünün. Oysa uygulamanızdaki sınıfların    izleyeceği yolu gösteren rehber(ler) olsa fena mı olurdu? İşte size arayüzler.    Bir arayüz oluşturun ve bu arayüzü uygulayan sınıfların hangi metodları, özellikleri    vb kullanması gerektiğine karar verin. Programın gelişmesimi gerekiyor? Yeni    niteliklere mi ihtiyacın var? İster kullanılan arayüzleri, birbirlerinden kalıtımsal    olarak türetin, ister yeni arayüzler tasarlayın. Tek yapacağınız sınıfların    hangi arayüzlerini kullanacağını belirtmek olucaktır.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Bu açıklamalar    ışığında bir arayüz nasıl tanımlanır ve hangi üyelere sahiptir bundan bahsedelim.Bir    arayüz tanımlanması aşağıdaki gibi yapılır. Yazılan kod bloğunun bir arayüz    olduğunu <strong>Interface</strong> anahtar sözcüğü belirtmektedir. Arayüz isminin    başında I harfi kullanıldığına dikkat edin. Bu kullanılan sınıfın bir arayüz    olduğunu anlamamıza yarayan bir isim kullanma tekniğidir. Bu sayede, sınıfların    kalıtımsal olarak aldığı elemanların arayüz olup olmadığını daha kolayca anlayabiliriz.</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font size="2"> </font></p>
<table bgcolor="#ffffee" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td><font color="#000099" face="Courier New, Courier, mono" size="2">public          inteface</font><font face="Courier New, Courier, mono" size="2"> IArayuz<br />
{</font></p>
<p><font face="Courier New, Courier, mono" size="2">}</font></td>
</tr>
</table>
<p></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Tanımlama görüldüğü    gibi son derece basit. Şimdi arayüzlerin üyelerine bir göz atalım. Arayüzler,    sadece aşağıdaki üyelere sahip olabilirler:</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">     </font> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table border="0" bordercolor="#990000" cellpadding="5" cellspacing="2" height="123" width="40%">
<tr>
<td bgcolor="#990000" height="23" width="100%">
<p align="center"><font color="#ffffff" face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>Arayüz          Üyeleri</strong></font></p>
</td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="22" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>A</strong>. Özellikler (properties)</font></td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="24" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>B</strong>. Metodlar (methods)</font></td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="24" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>C</strong>. Olaylar (events)</font></td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="26" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>D</strong>. İndeksleyiciler (indexers)</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Tablo 1. Arayüzlerin  sahip olabileceği üyeler</em></font></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">  </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Diğer yandan, arayüzler    içerisinde aşağıdaki üyeler kesinlikle kullanılamazlar:</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"></p>
<table border="0" cellpadding="5" cellspacing="2" height="111" width="40%">
<tr>
<td bgcolor="#990000" height="26" width="100%"><strong><font color="#ffffff" face="Verdana, Arial, Helvetica, sans-serif" size="2">        Arayüzlerde Kullanılamayan Üyeler</font></strong></td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="27" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>i</strong>. Yapıcılar (constructors)</font></td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="27" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>ii</strong>. Yokediciler (destructors)</font></td>
</tr>
<tr>
<td bgcolor="#ffebd7" height="28" width="100%"><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>iii</strong>. Alanlar (fields)</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Tablo 2. Arayüzlerde  kullanılamayan üyeler. </em></font>  </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Arayüzler <em>Tablo1</em>    deki üyelere sahip olabilirler. Peki bu üyeler nasıl tanımlanır. Herşeyden önce    arayüzler ile ilgili en önemli kural onun bir rehber olmasıdır. Yani arayüzler    sadece, kendisini rehber alan sınıfların kullanacağı üyeleri tanımlarlar. Herhangi    bir kod satırı içermezler. Sadece özelliğin, metodun, olayın veya indeksleyicinin    tanımı vardır. Onların kolay okunabilir olmalarını sağlayan ve çoklu kalıtım    için tercih edilmelerine neden olan sebepte budur. Örneğin;</font></font></p>
<table bgcolor="#ffffee" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td><font face="Courier New, Courier, mono" size="2"> <font color="#0000cc">public        interface</font> IArayuz<br />
{<br />
<font color="#009900"><strong>/*        double tipte bir özellik tanımı. get ve set anahtar sözcüklerinin herhangibir        blok {} içermediğine dikkat edin. */</strong></font></font><strong><font color="#009900" face="Verdana, Arial, Helvetica, sans-serif">         </font></strong><font color="#009900" face="Verdana, Arial, Helvetica, sans-serif">         </font><font face="Verdana, Arial, Helvetica, sans-serif">        </font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">             </font></font><font color="#0000cc" face="Courier New, Courier, mono" size="2">double</font><font face="Courier New, Courier, mono" size="2">          isim<br />
{<br />
<font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif">             </font></font></font>    <font color="#0000cc"> <font face="Courier New, Courier, mono" size="2">get;<br />
</font></font><font color="#0000cc" face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">             </font>     </font><font color="#0000cc" face="Courier New, Courier, mono" size="2">set;</font><font face="Courier New, Courier, mono" size="2"><br />
}</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif">      </font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">             </font></font></font>    <font color="#009900"><strong> </strong></font></font><strong><font color="#009900" face="Courier New, Courier, mono" size="2">/*          Yanlız okunabilir (ReadOnly) string tipte bir özellik tanımı. */</font></strong><font face="Courier New, Courier, mono" size="2">          </font> <font face="Courier New, Courier, mono" size="2"><br />
</font><font color="#0000cc" face="Courier New, Courier, mono" size="2">string</font><font face="Courier New, Courier, mono" size="2">          soyisim<br />
<font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif">            </font></font></font>{<br />
</font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">            </font></font></font>        <font color="#0000cc"> </font></font><font color="#0000cc" face="Courier New, Courier, mono" size="2">get          ;</font><font face="Courier New, Courier, mono" size="2"><br />
}</font>        </font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">                  </font></font><font color="#009900" face="Courier New, Courier, mono" size="2"><strong>/*          integer değer döndüren ve ili integer parametre alan bir metod tanımı.          Metod tanımlarındada metodun dönüş tipi, parametreleri, ismi dışında herhangibir          kod satırı olmadığına dikkat edin. */</strong></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif">      </font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">                  </font></font><font color="#0000cc" face="Courier New, Courier, mono" size="2">int</font><font face="Courier New, Courier, mono" size="2">          topla(int a, int b);</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif">      </font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">                  </font></font><font color="#009900" face="Courier New, Courier, mono" size="2"><strong>/*          Dönüş değeri olmayan ve herhangibir parametre almayan bir metod tanımı.          */</strong></font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif">      </font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">                  </font></font><font color="#0000cc" face="Courier New, Courier, mono" size="2">void</font><font face="Courier New, Courier, mono" size="2">          yaz();</p>
<p><font face="Verdana, Arial, Helvetica, sans-serif">                  </font><font color="#009900"><strong>/* Bir indeksleyici tanımı */</strong></font><br />
<font face="Verdana, Arial, Helvetica, sans-serif">                  </font><font color="#0000cc">string this</font> [ int index]<br />
<font face="Verdana, Arial, Helvetica, sans-serif">                  </font>{<br />
</font><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">             </font></font></font>          </font></font><font color="#0000cc" face="Courier New, Courier, mono" size="2">get;<br />
</font><font color="#0000cc" face="Verdana, Arial, Helvetica, sans-serif"><font face="Courier New, Courier, mono" size="2">             </font>          </font><font color="#0000cc" face="Courier New, Courier, mono" size="2">set;</font><font face="Courier New, Courier, mono" size="2"><br />
<font face="Verdana, Arial, Helvetica, sans-serif"><font face="Verdana, Arial, Helvetica, sans-serif">                  </font></font>}<br />
}</font></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif">      </font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Görüldüğü gibi sadece tanımlamalar    mevcut. Herhangibir kod satırı mevcut değil. Bir arayüz tasarlarken uymamız    gereken bir takım önemli kurallar vardır. Bu kurallar aşağıdaki tabloda kısaca    listelenmiştir.</font></font></p>
<table border="0" cellpadding="5" cellspacing="2" height="266" width="100%">
<tr>
<td align="center" width="3%"><strong><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif" size="2">        1</font></strong></td>
<td bgcolor="#ffffff" width="97%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">        <font color="#cc0000"><strong>Bir arayüz&#8217;ün tüm üyeleri public kabul edilir.</strong></font>        Private, Protected gibi belirtiçler kullanamayız. Bunu yaptığımız takdirde        örneğin bir elemanı private tanımladığımız takdirde, derleme zamanında şu        hatayı alırız. <strong><em>&#8220;The modifier &#8216;private&#8217; is not valid for        this item&#8221;</em></strong></font></td>
</tr>
<tr>
<td align="center"><strong><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif" size="2">        2</font></strong></td>
<td bgcolor="#ffffff"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong><font color="#cc0000">Diğer yandan bir metodu public olarakta tanımlayamayız.</font></strong>        Çünkü zaten varsayılan olarak bütün üyeler public tanımlanmış kabul edilir.        Bir metodu public tanımladığımızda yine derleme zamanında şu hatayı alırız.        <strong><em>&#8220;The modifier &#8216;public&#8217; is not valid for this item&#8221;</em></strong></font></td>
</tr>
<tr>
<td align="center"><strong><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif" size="2">        3</font></strong></td>
<td bgcolor="#ffffff"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">        <font color="#cc0000"><strong>Bir arayüz, bir yapı(struct)&#8217;dan veya bir        sınıf(class)&#8217;tan kalıtımla türetilemez.</strong></font> Ancak, bir arayüzü        başka bir arayüzden veya arayüzlerden kalıtımsal olarak türetebiliriz.</font></td>
</tr>
<tr>
<td align="center"><strong><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif" size="2">        4</font></strong></td>
<td bgcolor="#ffffff"><font color="#cc0000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>Arayüz elemanlarını static olarak tanımlayamayız.</strong></font></td>
</tr>
<tr>
<td align="center"><strong><font color="#000099" face="Verdana, Arial, Helvetica, sans-serif" size="2">        5</font></strong></td>
<td bgcolor="#ffffff"><font color="#cc0000" face="Verdana, Arial, Helvetica, sans-serif" size="2">        <strong>Arayüzlerin uygulandığı sınıflar, arayüzde tanımlanan bütün üyeleri        kullanmak zorundadır.</strong></font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Tablo 3. Uyulması  gereken kurallar.</em> </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Şimdi bu kadar    açıklamadan sonra konuyu daha iyi anlayabilmek için basit ve açıklayıcı bir    örnek geliştirelim. Önce arayüzümüzü tasarlayalım:</font><font size="2"> </font></p>
<table id="AutoNumber5" bgcolor="#ffffee" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font face="Courier New, Courier, mono" size="2">public        interface IArayuz<br />
</font>{<br />
<font color="#0000ff" face="Courier New, Courier, mono" size="2">                   void</font><font face="Courier New, Courier, mono" size="2"> EkranaYaz();<br />
</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">                   int</font><font face="Courier New, Courier, mono" size="2"> Yas<br />
</font><font face="Courier New, Courier, mono" size="2">                   {<br />
</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">                               get</font><font face="Courier New, Courier, mono" size="2">;<br />
</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">                               set</font><font face="Courier New, Courier, mono" size="2">;<br />
</font><font face="Courier New, Courier, mono" size="2">                   }</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">                     string</font><font face="Courier New, Courier, mono" size="2"> isim<br />
</font><font face="Courier New, Courier, mono" size="2">                     {<br />
</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">                          get</font><font face="Courier New, Courier, mono" size="2">;<br />
</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">                          set</font><font face="Courier New, Courier, mono" size="2">;<br />
</font><font face="Courier New, Courier, mono" size="2">                     }<br />
</font><font face="Courier New, Courier, mono" size="2">}</font></td>
</tr>
</table>
<p><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Şimdide bu  arayüzü kullanacak sınıfımızı tasarlayalım.</font></font></p>
<p><font size="2"><font size="2"></p>
<table bgcolor="#ffffee" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font color="#0000ff" face="Courier New, Courier, mono" size="2">public         class</font><font face="Courier New, Courier, mono" size="2"> Kisiler:IArayuz<br />
</font><font size="2">{</font><font face="Courier New, Courier, mono">        </font><font face="Courier New, Courier, mono"><font size="2">}</font></font></td>
</tr>
</table>
<p></font></font><font size="2"><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Şimdi bu anda  uygulamayı derlersek, IArayuz&#8217;ündeki elemanları sınıfımız içinde  kullanmadığımızdan dolayı aşağıdaki derleme zamanı hatalarını alırız.</font></font></font></p>
<ul><font size="2"><font size="2"></p>
<li><font color="#666666" face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Interfaces1.Kisiler&#8217;      does not implement interface member &#8216;Interfaces1.IArayuz.EkranaYaz()&#8217;</em></font></li>
<li><font color="#666666"><em><font face="Verdana, Arial, Helvetica, sans-serif" size="2">      Interfaces1.Kisiler&#8217; does not implement interface member &#8216;Interfaces1.IArayuz.isim&#8217;</font></em></font></li>
<li><font color="#666666"><em><font face="Verdana, Arial, Helvetica, sans-serif" size="2">      Interfaces1.Kisiler&#8217; does not implement interface member &#8216;Interfaces1.IArayuz.Yas&#8217;</font></em></font></li>
<p></font></font></ul>
<p><font size="2"><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Görüldüğü gibi  kullanmadığımız tüm arayüz üyeleri için bir hata mesajı oluştu. Bu noktada şunu  tekrar hatırlatmak istiyorum,</font></font></font></p>
<p align="center"> <font size="2"><font size="2">  </font></font><center> <font size="2"><font size="2"></p>
<table id="AutoNumber7" border="0" cellpadding="10" cellspacing="0" width="70%">
<tr>
<td align="center" bgcolor="#cc0000" height="45" width="100%">
<p align="center"><strong>              <font color="#ffffff" face="Verdana, Arial, Helvetica, sans-serif" size="2">Arayüzlerin              uygulandığı sınıflar, arayüzde(lerde) tanımlanan tüm üyeleri kullanmak,              yani kodlamak zorundadır.</font></strong></p>
</td>
</tr>
</table>
<p></font></font></center></p>
<p><font size="2"><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> Şimdi sınıfımızı    düzgün bir şekilde geliştirelim:</font></font></font></p>
<p><font size="2"><font size="2"><font size="2"></p>
<table id="AutoNumber8" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td bgcolor="#ffffee" width="100%"><font face="Courier New, Courier, mono" size="2">        <font color="#0000cc">public  class</font> Kisiler:IArayuz <font color="#009900">/*        Sınıfın kullanacağı arayüz burada belirtiliyor.*/<br />
</font></font><font size="2">{</font><font face="Courier New, Courier, mono">        </font><font face="Courier New, Courier, mono"><font size="2">                     <font color="#0000cc">private</font> int y;<br />
</font><font size="2">                     <font color="#0000cc">private</font> string i;</font></font></p>
<p><font face="Courier New, Courier, mono">      </font><font face="Courier New, Courier, mono"><font size="2">                     <font color="#009900">/* Bir sınıfa bir arayüz uygulamamız, bu sınıfa          başka üyeler eklememizi engellemez. Burada örneğin sınıfın yapıcı metodlarınıda          düzenledik. */</font></font></font></p>
<p><font face="Courier New, Courier, mono">      </font><font size="2">        </font><font size="2"><font face="Courier New, Courier, mono" size="2">                     <font color="#0000cc">public</font> Kisiler()<br />
</font><font face="Courier New, Courier, mono" size="2">                     {<br />
</font><font face="Courier New, Courier, mono" size="2">                                 y=18;<br />
</font><font face="Courier New, Courier, mono" size="2">                                 i=&#8221;Yok&#8221;;<br />
</font><font face="Courier New, Courier, mono" size="2">                     }</font></font></p>
<p><font size="2">      <font face="Courier New, Courier, mono" size="2"> </font><font face="Courier New, Courier, mono">        </font></font><font size="2"><font face="Courier New, Courier, mono"><font color="#009900" size="2">                     /* Dikkat ederseniz özelliğin herşeyi, arayüzdeki ile aynı olmalıdır.          Veri tipi, ismi vb&#8230; Bu tüm diğer arayüz üyelerinin, sınıf içerisinde          uygulanmasında da geçerlidir. */</font></font></font></p>
<p><font size="2"><font face="Courier New, Courier, mono">      </font></font><font size="2"><font face="Courier New, Courier, mono"><font size="2">                     <font color="#0000cc">public</font> Kisiler(string ad,int yas)<br />
</font><font size="2">                     {</font></font></font></p>
<p><font size="2"><font face="Courier New, Courier, mono">      </font></font><font size="2"><font face="Courier New, Courier, mono"><font size="2">                                 y=yas;<br />
</font><font size="2">                                 i=ad;<br />
</font><font size="2">                     }</font></font></font></p>
<p><font size="2"><font face="Courier New, Courier, mono">      </font></font><font face="Courier New, Courier, mono" size="2">                     <font color="#0000cc">public</font> int Yas<br />
</font><font face="Courier New, Courier, mono" size="2">                     {<br />
</font><font face="Courier New, Courier, mono" size="2">                                 <font color="#0000cc">get</font><br />
</font><font face="Courier New, Courier, mono" size="2">                                 {<br />
</font><font face="Courier New, Courier, mono" size="2">                                             return y;<br />
</font><font face="Courier New, Courier, mono" size="2">                                 }</font></p>
<p><font face="Courier New, Courier, mono" size="2">                                 <font color="#0000cc">set</font><br />
</font><font face="Courier New, Courier, mono" size="2">                                 {<br />
</font><font face="Courier New, Courier, mono" size="2">                                             y=value;<br />
</font><font face="Courier New, Courier, mono" size="2">                                 }<br />
</font><font face="Courier New, Courier, mono" size="2">                     }</font></p>
<p><font face="Courier New, Courier, mono" size="2">                     <font color="#0000cc">public string</font> Isim<br />
</font><font face="Courier New, Courier, mono" size="2">                     {<br />
</font><font face="Courier New, Courier, mono" size="2">                                 <font color="#0000cc">get</font><br />
</font><font face="Courier New, Courier, mono" size="2">                                 {<br />
</font><font face="Courier New, Courier, mono" size="2">                                             return i;<br />
</font><font face="Courier New, Courier, mono" size="2">                                 }</font></p>
<p><font face="Courier New, Courier, mono" size="2">                                 <font color="#0000cc">set</font><br />
</font><font face="Courier New, Courier, mono" size="2">                                 {<br />
</font><font face="Courier New, Courier, mono" size="2">                                             i=value;</font><br />
<font face="Courier New, Courier, mono" size="2">                                 }<br />
</font><font face="Courier New, Courier, mono" size="2">                    }</font></p>
<p><font face="Courier New, Courier, mono" size="2">                     <font color="#0000cc">public void</font> EkranaYaz()<br />
</font><font face="Courier New, Courier, mono" size="2">                     {<br />
</font><font face="Courier New, Courier, mono" size="2">                                 Console.WriteLine(&#8221;Adım:&#8221;+i);<br />
</font><font face="Courier New, Courier, mono" size="2">                                 Console.WriteLine(&#8221;Yaşım:&#8221;+y);<br />
</font><font face="Courier New, Courier, mono" size="2">                     }<br />
</font><font face="Courier New, Courier, mono" size="2">}</font></td>
</tr>
</table>
<p></font></font></font><font size="2"><font size="2"><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Şimdi oluşturduğumuz bu    sınıfı nasıl kullanacağımıza bakalım.</font></font></font></font></p>
<table id="AutoNumber9" bgcolor="#ffffee" border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="100%"><font color="#0000ff" face="Courier New, Courier, mono" size="2">        class</font><font face="Courier New, Courier, mono" size="2"> Arayuz_Deneme</font><br />
<font size="2">{</font><font face="Courier New, Courier, mono" size="2">         </font><br />
<font face="Courier New, Courier, mono" size="2">                 {</font><br />
<font face="Courier New, Courier, mono" size="2">                               Kisiler kisi=</font><font color="#0000ff" face="Courier New, Courier, mono" size="2">new</font><font face="Courier New, Courier, mono" size="2">        Kisiler(&#8221;Burak&#8221;,27);</font><br />
<font face="Courier New, Courier, mono" size="2">                               Console.WriteLine(&#8221;Yaşım &#8220;+kisi.Yas.ToString());</font><br />
<font face="Courier New, Courier, mono" size="2">                               Console.WriteLine(&#8221;Adım &#8220;+kisi.Isim);</font><br />
<font face="Courier New, Courier, mono" size="2">                               Console.WriteLine(&#8221;&#8212;&#8212;&#8212;&#8211;&#8221;);</font><br />
<font face="Courier New, Courier, mono" size="2">                               kisi.EkranaYaz();</font><br />
<font face="Courier New, Courier, mono" size="2">                   }<br />
</font><font face="Courier New, Courier, mono" size="2">}</font></td>
</tr>
</table>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Uygulamamızı  çalıştırdığımızda aşağıdaki sonucu elde ederiz.</font></p>
<p align="left"><em> <img src="http://www.csharpnedir.com/Mimages/bsenyurt/mk38_1.gif" border="0" height="145" width="244" /></em><br />
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><em>Şekil 1. Uygulamanın    Çalışması Sonucu.</em></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netanlatim.com/arayuzinterface-kullanimina-giris.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
