tag:blogger.com,1999:blog-40718574821164425612024-03-12T22:48:45.625-07:00Yazılımcı Klavyesinden Dökülenler ...Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.comBlogger59125tag:blogger.com,1999:blog-4071857482116442561.post-45912671545429506662018-03-07T10:30:00.002-08:002018-03-07T10:30:58.750-08:00SignalR ve SqlDependency ile Real Time Notification (Cannot find the object "QueryNotificationErrorsQueue" because it does not exist or you do not have permissions.)Merhabalar,<br />
<br />
Asp.Net MVC ile geliştirdiğiniz uygulama üzerinde SignalR ve SqlDependency kullanarak veri tabanınızdaki herhangi bir tablo üzerindeki verilerde herhangi bir değişiklik olduğunda real time olarak notification almak için gerekli tüm işlemler yaptığınızı, yazdığınız kodların local makinazında çalıştığını fakat veri tabanı connection bilgisini hosting üzerinde bulunan veri tabanı olarak ayarladığınızda aşağıdaki hatayı alıyorsanız eğer ;<br />
<br />
"Cannot find the object "QueryNotificationErrorsQueue" because it does not exist or you do not have permissions."<br />
<br />
yapmanız gereken aşağıdaki sql komutlarını çalıştırıp, oluşan SqlDependenct Role üne bağlantıda kullandığınız database user ı eklemeniz sorunu çözümlemenize yardımcı olacaktır.<br />
<br />
CREATE ROLE [SQLDependency] AUTHORIZATION [dbo]<br />
GO<br />
<br />
CREATE SCHEMA [SQLDependency] AUTHORIZATION [SQLDependency]<br />
GO<br />
<br />
--Database level permissions<br />
GRANT CREATE PROCEDURE to [SQLDependency];<br />
GRANT CREATE QUEUE to [SQLDependency];<br />
GRANT CREATE SERVICE to [SQLDependency];<br />
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [SQLDependency];<br />
GRANT VIEW DEFINITION TO [SQLDependency];<br />
GRANT SELECT to [SQLDependency]<br />
<br />
--Service Broker permissions<br />
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [SQLDependency];<br />
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [SQLDependency];<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
Umarım faydalı olmuştur. Görüşmek üzere. </div>
<div>
<br /></div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-20716641069942031112017-02-21T03:34:00.001-08:002017-02-21T03:34:09.431-08:00IIS Server Üzerinde WCF Service Yayınlamak İçin (The remote server returned an unexpected response: (405) Method Not Allowed.)Merhabalar ,<br />
<br />
Wcf service'inizi web site a dönüştürdükten sonra eğer server üzerinde daha önceden wcf service yayınlanmadıysa aşağıdaki konutu command prompt üzerinde çalıştırmanız gerekmektedir.<br />
<br />
<pre class="default prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">c</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">:</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">\Windows\Microsoft</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">NET\Framework\v</span><span class="lit" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">3.0</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">\Windows </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Communication</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Foundation</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">\ServiceModelReg</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">exe </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">-</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">i</span></code></pre>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-20444562418290833622016-09-22T02:03:00.001-07:002016-09-22T02:03:30.249-07:00Windows Form Application System Security ExceptionMerhaba değerli okurlar,<br />
<br />
Bu makalemde sizlere bir hafta öncesinde karşılaştığım bir sorunun senaryosunu ve çözümünü anlatacağım. Dilerim böyle bir senaryo ile karşılaştığınızda bu makaleye kolay ulaşmış ve sorunu hızlı bir şekilde çözmüş olursunuz.<br />
<br />
Senaryomuz şu şekilde ;<br />
<br />
Bir tane windows form uygulaması yazdınız ve bu uygulama gerek server makinada gerekse herhangi bir pc üzerinde kurulu çalışmaya hazır olsun. Fakat bu uygulamayı bir çok sağladığı avantajlardan dolayı bu pc/server üzerinden paylaşıma açıyorsunuz ve client pc ler paylaşımda olan exe yi kendi makinaları üzerinde kısayol olarak ayarlayıp çalıştırıyorlar. Buraya kadar herşey çok güzel. Ne var ki bunda çalıştıramazlar mı yani ? Elbette ki çalıştırabilirler. Fakat eğer bu uygulama üzerinde reflection kullanarak başka bir uygulamayı (gene kendi yazdığınız uygulamayı) ayağa kaldırmaya çalıştığınız zaman bizim karşılaştığımız hatayı "System security exception" alabilirsiniz. Böyle bir durumda iki farklı yoldan çözüme ulaşabilirsiniz.<br />
<br />
Çözümler ise şu şekildedir ;<br />
<br />
1-) AppDomain kavramını çok iyi anlamanız gerekiyor. Malesef bu makalede bu konuyu anlatmayacağım. Bir çok kaynaktan bu bilgiye rahatlıkla ulaşabilirsiniz. AppDomain'i iyi bir şekilde öğrendikten sonra reflection kullanarak açtığını uygulamayı yeni bir appDomain oluşturup onun üzerinden açabilir ve o oluşturulan appDomain'e istediğiniz şekilde Permission'lar set edebilirsiniz. Bu yöntem biraz sancılı ve çok iyi bir şekilde tasarlanıp kodlanması gerekmektedir. Diğer yöntem daha kolay olduğu için ben aşağıda anlatacağım çözüm yoluna gittim.<br />
<br />
2-) Bu senaryo da daha önceden çözüm olarak Yönetimsel Araçlar da bulunan .Net Configuration Tool u üzerinden Intranet,Computer ve diğer sekmelerde Full Trust yetkisi veriyorduk. Windows 10 üzerinde bu tool (.net 3.5 için) bulunmamaktadır. Bu yüzden tool kullanarak Full Trust veremedik. Yaptığım araştırmalar sonucunda Command Promt kullanarak da bu işlemi yapabildiğimizi öğrendim. Yapılması gerekenler sırasıyla şu şekildedir ;<br />
<br />
<br />
<ul>
<li>Command Promt'u yönetici olarak çalıştırın ve aşağıdaki kodları sırasıyla yazıp çalıştırın.</li>
<li>cd %windows un kurulu olduğu disk adı
%:\Windows\Microsoft.NET\Framework\v2.0.50727</li>
<li> caspol.exe -m -ag 1 -url "file://\\%Belediyenet klasorunun
bulunduğu serverın ip si%\BelediyeNet\*" FullTrust</li>
<li>Eğer windows 64 bit ise aşağıdaki kodları da çalıştırmanız gerekiyor</li>
<li>cd %windows un kurulu olduğu disk adı
%:\Windows\Microsoft.NET\Framework64\v2.0.50727</li>
<li> caspol.exe -m -ag 1 -url "file://\\%Belediyenet klasorunun
bulunduğu serverın ip si%\BelediyeNet\*" FullTrust</li>
</ul>
Bu işlemlerden sonra uygulamayı yeniden çalıştırdığımızda sorun ortadan kalktı. Umarım sizin sorununuza da çözüm olur.<br />
<div>
<br /></div>
<div>
Bir sonraki makalede görüşmek dileğiyle.</div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-15710679658486075072016-02-22T01:58:00.000-08:002016-02-22T01:58:22.602-08:00Central Authentication Service Entegrasyonu (CAS)<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div align="center" class="MsoNormal" style="text-align: center;">
<b><span style="color: #c0504d; mso-themecolor: accent2;">Central
Authentication Service Entegrasyonu (CAS)<o:p></o:p></span></b></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="color: #c0504d; font-family: "symbol"; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-themecolor: accent2;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]--><b><span style="color: #c0504d; mso-themecolor: accent2;">CAS Nedir ?<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-left: 35.4pt;">
CAS Single Sign-On hizmetini
sağlayan open source bir sistemdir.Birden fazla sistemi CAS ile entegre edip
merkezi bir authentication sağlayabilirsiniz. Böylelikle n tane sistem tek bir
yerden authentication işlemi yapar ve n tane sistemi tek bir kez authentication
işleminden sonra kullanabilirsiniz.<o:p></o:p></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="color: #c0504d; font-family: "symbol"; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-themecolor: accent2;">·<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]--><b><span style="color: #c0504d; mso-themecolor: accent2;">CAS Mimarisi</span></b><span style="color: #c0504d; mso-themecolor: accent2;"><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<br /></div>
<div class="MsoListParagraphCxSpMiddle">
Aşağıdaki Şekil 1 resminde de detaylı
incelendiğinde CAS mimarisinin adımları aşağıdaki maddelerde anlatıldığı gibi
olduğu görülebilir.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Uygulama Get olarak server dan user tarafından
çağırılır,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Sunucu response olarak CAS ın bulunduğu linkin
login sayfasını service parametresi ile birlikte çağırır. Bu service
parametresinde kullanıcı CAS üzerinden login olduktan sonra CAS’ın gelen isteği
hangi sayfaya yönlendireceğinin bilgisi olmalıdır,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Kullanıcının karşısına CAS login ekranı gelir ve
kullanıcı login olur,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Login işleminden sonra CAS authentication
işlemini yapar ,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Bir sonraki adım olarak service parametresi
olarak verilen linke GET olarak sonuna ticket queryString ini ekleyerek
yönlendirme yapar. Bu yonlendırmeden once yapılacak olan isteğin içerisine
CASTGC cookie’sini ekler,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Daha sonra CAS’ın yönlendirme yaptığı sayfa
içerisinde istek ile gelen ticket querystring i ile birlikte CAS’a Get olarak
“casserverlink/serviceValidate?ticket=…&service=…” istek yapılır ve CAS üzerinden gelen ticket
bilgisinin validation işlemi yapılır.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Bu işlemden sonra CAS’dan xml olarak gelen
kullanıcı bilgileri içerisindeki bilgiler alınır ve Cookie lere JSESSIONID
olarak asp sessionID atılır,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Bu aşamadan sonra artık kullanıcının
authentication işlemi tamamlanır. <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Bir başka uygulamaya ilk erişiminde ise
5.aşamada cookie’ye atılan CASTGC bilgisi request’in cookie bilgisine eklenerek
CAS uzerınde validate yapılır ve CAS yeni bir ticket üretir ve querystring ile bizim
querystring olarak verdiğimiz service bilgisindeki linke yönlendirme yapar,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "courier new"; mso-fareast-font-family: "Courier New";">o<span style="font-family: "times new roman"; font-size: 7pt; font-stretch: normal;">
</span></span><!--[endif]-->Yeni oluşan ticket bu şekilde alındıktan sonra
6. Aşama tekrarlanır,<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBOB0t9BsuNHOE_S9wSD4P53ZjtYAUiPvD6uKCqEhthTHO0IBfdK0X_JL0wHkCjL1RWvIutzvNNYNpmvdXppmkrHazH8Li3itFg6Y6p9w8pqgHUZ5D7tfw_-1pwUsTR1TJXN6rGmYK1GFr/s1600/cas_flow_diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBOB0t9BsuNHOE_S9wSD4P53ZjtYAUiPvD6uKCqEhthTHO0IBfdK0X_JL0wHkCjL1RWvIutzvNNYNpmvdXppmkrHazH8Li3itFg6Y6p9w8pqgHUZ5D7tfw_-1pwUsTR1TJXN6rGmYK1GFr/s640/cas_flow_diagram.png" width="387" /></a></div>
<br />
<br />
<div align="center" class="MsoListParagraphCxSpLast" style="text-align: center;">
<b><span style="color: #c0504d; mso-themecolor: accent2;">Şekil 1<o:p></o:p></span></b></div>
<div align="center" class="MsoListParagraphCxSpLast" style="text-align: center;">
<b><span style="color: #c0504d; mso-themecolor: accent2;"><br /></span></b></div>
<div align="center" class="MsoListParagraphCxSpLast" style="text-align: center;">
<b><span style="color: #c0504d; mso-themecolor: accent2;"><br /></span></b></div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
Asp.Net web form projelerinde CAS 2.0 entegrasyonu çok sıkıntılı bir süreçtir. Asp.Net web form uygulamalarında bulunan page life cycle nedeni ile kullanıcının ilk yaptığı istek CAS'a yapılan yönlendirmeden sonra kaybolmaktadır. Bu durum CAS'ın hazırladığı .Net Library kullanıldığında oluşur. Bu nedenle eğer Asp.Net web form uygulaması ile CAS entegrasyonu yapıyorsanız malesef yapamayacaksınız. İnternet üzerinde CASP.cs class'ına rahatlıkla erişip onun üzerinden işlemlerinizi yapabilirsiniz. Bu class içerisindeki Authenticate methodunu kullanarak authentication işlemini gerçekleştirebilirsiniz. Fakat CAS'ın resmi sitesindeki dökümanları incelediğinizde de göreceksiniz ki CAS tarafından oluşturulan ticket sadece 1 kez validate ettirilir. Bu nedenle bir kez validate işlemi yapıldıktan sonra asp.net uygulamnızda kullanıcı bilgilerini session üzerinde tutarsanız CAS üzerinden kullanıcı login ve validation işlemini yapmış olursunuz. Fakat Bu senaryoda ise kullanıcı CAS uzerınden logout olduğunda , sizin uygulama üzerinde kullanıcı bilgileri session da tutulduğu için single sign out olarak ayarlayamacaksınız. Malesef bu durumu göze almak zorundasınız. </div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
Uygulamanız üzerinden logout olunduğunda CAS üzerinde de logout olması için tek yapmanız aşağıdaki link'e redirect yapmanız yetecektir.</div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
casserverlinki/logout </div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="text-align: left;">
Umarım faydalı olmuştur. Bir sonraki makalemizde görüşmek üzere. </div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-56408925282061839552015-02-12T07:15:00.001-08:002015-02-12T07:15:57.699-08:00NHiberNate ile EmptyInterceptor ve IInterceptor Kullanarak Loglama Nasıl Yapılır ? <div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Merhabalar değerli okurlar, </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Bugün sizlere NHibernate kullanarak Logging işlemini nasıl yapılabileceğini anlatacağım. Senaryomuzdan hemen bahsetmek istiyorum. Var olan herhangi bir database içerisinde dilediğimiz bir tablo üzerinde yapılan işlemi ve işlemdeki verileri loglamak istediğimizi düşünelim. Alacağımız log bilgilerinde hangi kullanıcının hangi tablo içindeki hangi veri üzerinde hangi işlemi yaptını ve işlem sonucundaki verinin kaydını tuttuğumuzu düşünelim. Oluşturduğumuz senaryo loglama sistemi için şuan yeterli görünmekte. Dilerseniz siz log kayıt bilgilerine istediğiniz bilgiyi ekleyebilirsiniz. </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
İlk olarak eğer yapılan işlemi database üzerine yansıtılmadan yakalamak ve ona göre işlem yapmak istiyorsak , ki senaryomuz gereği bunu yapmamız gerekir. Çünkü yapılan işlemi application katmanında her işlemde parametre olarak almaktansa bu şekilde işlem database üzerine yansıtılmadan araya girip yapılan işlemi ve veriyi yakalamak çok daha mantıklı ve profesyonelce durmaktadır. </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Eğer orm olarak NHibernate kullanıyorsak ve yukarıda tanımladığım işlemi yapmak istiyorsak, NHibernate içerisinde bulunan IInterceptor inteface ini incelemek ve bu interface i kendine implemente etmiş olan EmptyInterceptor class ını iyi anlamamız gerekmektedir. IInterceptor interface i içerisindeki methodları incelecek olursak , </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
void AfterTransactionBegin(ITransaction tx); // Kullanılan session içerisindeki transaction başladıktan sonra tetiklenen method</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
void AfterTransactionCompletion(ITransaction tx); // Kullanılan session içerisindeki transaction tamamlandıktan sonra tetiklenen method</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
void BeforeTransactionCompletion(ITransaction tx); //Kullanılan session içerisindeki transaction tamamlanmadan önce tetiklenen method</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
....</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
....</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
....</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Methodların isimlerinden ne zaman tetiklendiği zaten belli olmaktadır. Bizim senaryomuz gereği kullanacağımız methodlar ise ;</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
void OnDelete(object entity, object id, object[] state, string[] propertyNames, IType[] types); // Entity nin silinmeden önce tetiklenen method</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
bool OnFlushDirty(object entity, object id, object[] currentState, object[] previousState, string[] propertyNames, IType[] types); // Entity nin güncellenmeden önce tetiklenen method</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types); // Entity nin eklenmeden önce tetiklenen method</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
EmptyInterceptor class'ına bakacak olursak, IInterceptor interface ini implemente ettiğini ve bu interface içerisindeki methodları virtual olarak hazırladığını görmekteyiz. Bu şu anlama gelmektedir. Eğer ben bu class üzerinden miras alarak kendi class'ımı oluşturursam, OOP mantığı ile hem IInterceptor interface indeki tüm methodları yapabilir hale gelmiş oluyorum, hem de minimum istekleri karşılayıp sadece kendi özel olarak kodlamak istediğim methodları ezerek, yapmak istediğim işleri yapabilir hale geliyorum. OOP'ın bu güzel nimetlerini kullanarak kendi Interceptor class'ımı oluşturup onu adeta bir log class'ı haline sokabilirim. Aynen şu şekilde , </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
[Serializable]<br />public class MyInterceptor : EmptyInterceptor<br />{<br />public string _databaseName = "";</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
public string _kullaniciAdi = "";</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
public string _sifre = "";<br />public MyInterceptor(string databaseName,string kullaniciAdi,string sifre)<br />{<br />_databaseName = databaseName;</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
_kullaniciAdi = kullaniciAdi;</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
_sifre = sifre;<br />}<br />public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)<br />{<br /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
// yapılan işlem insert işlemidir ve insert yapılan nesne, property isimleri, tipleri gelmektedir. Bu bilgilerden faydalanarak şu tablo üzerinde şu veri üzerinde şu işlem yapıldı. diyebiliyoruz. Constructure methodunda da kullanıcı adı ve şifre bilgisini alıyorum. İsterseniz sadece kullanıcı bilgisini alabilirsiniz. Tamamen size kalmış bir durum. Tüm bilgileri aldıktan sonra loglama işlemini dilediğimiz gibi yapabiliriz. </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br />return true;<br /><br />}</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br />public override void OnDelete(object entity, object id, object[] state, string[] propertyNames, IType[] types)<br />{<br />// yapılan işlem delete işlemidir ve delete yapılan nesne, property isimleri, tipleri gelmektedir. Bu bilgilerden faydalanarak şu tablo üzerinde şu veri üzerinde şu işlem yapıldı. diyebiliyoruz. Constructure methodunda da kullanıcı adı ve şifre bilgisini alıyorum. İsterseniz sadece kullanıcı bilgisini alabilirsiniz. Tamamen size kalmış bir durum. Tüm bilgileri aldıktan sonra loglama işlemini dilediğimiz gibi yapabiliriz.<br />}<br />public override bool OnFlushDirty(object entity, object id, object[] currentState, object[] previousState, string[] propertyNames, IType[] types)<br />{<br />// yapılan işlem update işlemidir ve update yapılan nesnenin güncellenmek istenen değerleri ve veri tabanında kayıtlı olan değerleri, property isimleri, tipleri gelmektedir. Bu bilgilerden faydalanarak şu tablo üzerinde şu veri üzerinde şu işlem yapıldı. diyebiliyoruz. Constructure methodunda da kullanıcı adı ve şifre bilgisini alıyorum. İsterseniz sadece kullanıcı bilgisini alabilirsiniz. Tamamen size kalmış bir durum. Tüm bilgileri aldıktan sonra loglama işlemini dilediğimiz gibi yapabiliriz.<br />return true;<br />}<br /><br />}</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Evet değerli okurlar, artık Interceptor class'ımız hazır. Tek yapmamız gereken Interceptor class'ımızı session üzerinde tutturmak ve configuration bilgilerine eklemek. Bunun için aşağıdaki kodları yazmamız yeterli olacaktır. </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Configuration cfg = new Configuration();</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
public MyInterceptor ins = new MyInterceptor ("myLogDatabaseName");</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
cfg.SetInterceptor(ins);</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
ISessionFactory factory ;<br />ISession session;</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
factory = cfg.BuildSessionFactory();<br />session = factory.OpenSession(ins);</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
kodlar yeterli olacaktır. Umarım faydalı olmuştur değerli okurlar.</div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Bir sonraki makalemde görüşmek üzere. </div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
<br data-mce-bogus="1" /></div>
<div style="color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; line-height: 24px;">
Koray Düzgün. MCTS</div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-83451902636606085382015-01-27T01:19:00.000-08:002015-01-27T01:19:52.485-08:00MSSQL Kurulumunda Hata ( code 29506 sql )Merhabalar arkadaşlar ,<br />
<br />
Mssql expres sürümlerinden kurulum yaparken "code 29506" hatası alıyorsanı yapmanız gereken adımlar şunlar olmalıdır ;<br />
<br />
<br />
<ul>
<li>C:\Windows\System32 içerisinde bulunan cmd.exe yi yönetici olarak çalıştırın ,</li>
<li>Sonrasında cd\"kurulum dosyasının bulunduğu dizin" yazıp Enter'a basın</li>
<li>Daha sonra kurulum dosyasının tam adını yazın ve Enter'a basın.</li>
</ul>
<br /><br />
Tekrardan kurulum ekranı açılacaktır. Sonrasındaki standart kurulum aşamalarını yaparak kurulumu başarılı bir şekilde tamamlayabilirsiniz.<br />
<br />
Umarım faydalı olmuştur.<br />
<br />
Bir sonraki makalede görüşmek üzere.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-17649198875367990942015-01-02T05:17:00.000-08:002015-01-02T05:17:56.875-08:00C# ile Captcha Decoding - Mean ve Median Filtre Kullanımı<span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Merhabalar değerli okurlar ,</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">bugün sizlerle birlikte biraz resim işleme durumlarını inceleyeceğiz. Senaryomuz, hepimizin bildiği captcha yani resim doğrulama kodlarını otomatik olarak çözümleyip içerisindeki karakterlerin neler olduğunu bize veren bir uygulama hazırlamak olacak. İlk olarak sonuca ulaşmamız için captcha resmindeki kirliliği temizlememiz gerekecek. Kirlilik derken aslında resim içerisindeki karakterlerin zor okunması için hazırlanan desenlerden bahsediyorum. Desen dediğim için gözünüz korkmasın sakın, çünkü aslında desen dediğimiz şey temelinde pixel. Peki aslında her şey resim üzerinde pixel ise, harfler de pixeldir. Harf ve desenleri nasıl ayıracağız ? Bu sorunun çözümü aslında kişiden kişiye değişir. Bunun sebebi de bu soruna çözüm algoritmik olarak verilmektedir. Belirli hazır olan algoritmalar var elbet, fakat her captcha için geçerli değil. Peki bizim yapacağımız da her captcha için geçerli olacak mı ? Ağırlıklı olarak evet geçerli olacak. Çünkü zor bir captcha üzerinde çalıştım. Ama çözümlemeye çalıştığımız captcha'dan daha zor bir captcha verirseniz çözemeyebilir. Baştan söyleyim hazırlıklı olun :) </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Gelelim resim üzerindeki deseni nasıl temizleyeceğiz ? Bu duruma çözüm olarak benim kurmuş olduğum algoritma şu şekildedir. </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">1-) Resmi siyah beyaz yap</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">2-) Resmin 0,0 noktasından başlayarak 3*3 pixel (yani her bir zıplamada 9 pixel) tara.</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">3-) Alınan 3*3 pixellerin ortalaması belirli bir ortalamadan küçük ise tüm hepsini beyaz yap</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">4-) Büyük ise orjinal pixel değerlerini koru. </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Bu algoritmada şu sonuç ortaya çıkıyor. Resmi tamamen tarıyorum ve aslında benim için önemli olarak bir mean belirliyorum. Eğer pixellerin ortalama değeri benim belirlediğim ortalama değerden düşük ise o bölgeyi beyaza çevirerek temizlemiş oluyorum. Bu yönteme Image Processing alanı içerisinde Mean Filtering deniliyor. Farklı filtreleme yöntemleri de mevcut. Siz farklı şekilde uygulayabilirsiniz. </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Peki gelelim kod kısmına. Resmi siyah beyaz yapan kod parçacıklarını rahatlıkla bulabilirsiniz. Fakat ben gene de sizinle paylaşıyorum .</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> using (var original = new Bitmap(pb1.Image))</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> using (var resized = new Bitmap(original/*, new Size(pb1.Image.Width * 8, pb1.Image.Height * 8)*/))</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> original.Dispose();</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> using (var bmp = new Bitmap(resized))</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int y = 0; y < bmp.Height; y++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int x = 0; x < bmp.Width; x++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> Color eski = bmp.GetPixel(x, y);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> int ortalama = (eski.R + eski.G + eski.B) / 3;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> Color yeni = eski;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> if (ortalama > 213)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> yeni = Color.White;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> else</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> yeni = Color.Black;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> bmp.SetPixel(x, y, yeni);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Resmi siyah beyaz yaptıktan sonra sıra geldi kurmuş olduğumuz algoritmanın kodlarına. İşte bu kodlar ,</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> private void Maskeleme(Image image, string filename, int size, int ortalama)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> using (var bmp = new Bitmap(image))</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> using (var yenibmp = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format32bppRgb))</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int y = 0; y < bmp.Height; y++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var baslangicy = y;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var bitisy = y + size;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> if (bmp.Height < bitisy)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> bitisy = bmp.Height;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int x = 0; x < bmp.Width; x++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var baslangicx = x;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var bitisx = x + size;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> if (bmp.Width < bitisx)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> bitisx = bmp.Width;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var kucukbmp = bmp.Clone(new Rectangle(baslangicx, baslangicy, bitisx - baslangicx, bitisy - baslangicy), System.Drawing.Imaging.PixelFormat.Format32bppRgb);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> int ortalamaKucuk = 0, toplamRenk = 0;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int i = 0; i < kucukbmp.Width; i++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int j = 0; j < kucukbmp.Height; j++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> toplamRenk += (kucukbmp.GetPixel(i, j).R + kucukbmp.GetPixel(i, j).G + kucukbmp.GetPixel(i, j).B) / 3;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> ortalamaKucuk = toplamRenk / (kucukbmp.Height * kucukbmp.Width);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> if (ortalamaKucuk > ortalama)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int i = 0; i < kucukbmp.Width; i++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int j = 0; j < kucukbmp.Height; j++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> yenibmp.SetPixel(baslangicx + i, baslangicy + j, Color.White);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> else</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int i = 0; i < kucukbmp.Width; i++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> for (int j = 0; j < kucukbmp.Height; j++)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> yenibmp.SetPixel(baslangicx + i, baslangicy + j, kucukbmp.GetPixel(i, j));</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> x += (size - 1);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> if (bitisx == bmp.Width)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> break;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> //renkler.Add(bmp.GetPixel(x, y));</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> y += (size - 1);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> if (bitisy == bmp.Height)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> break;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> yenibmp.Save(Application.StartupPath + "\\" + filename); </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Maskeleme methodumuzu uyguladıktan sonra bir de Median Filtre uygularsak eğer daha temiz sonuç alırız. Bunun için Aforge kütüphanesi içerisinde bulunan Median filtresini uygulayacağız. Kodlar ;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> private void MedianFilterUygula(string sourceFile, string destinationFile)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> System.Drawing.Bitmap imageX = new Bitmap(Image.FromFile(sourceFile));</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> System.Drawing.Bitmap image = AForge.Imaging.Image.Clone(imageX, System.Drawing.Imaging.PixelFormat.Format24bppRgb);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> AForge.Imaging.Filters.Median filter = new Median();</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> Bitmap newImage = filter.Apply(image);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> newImage.Save(destinationFile);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> pb1.Image = newImage;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Peki şimdi resmi siyah beyaz yaptık, maskeleme methodumuz ile desenleri de temizledik. Peki harfleri resim içerisinden nasıl tanıyacağız ? Bu durumda kullanılan en yaygın yöntem her bir karakterin 1 ve 0 olarak haritası ile resim içerisinde eşleştirme yapmak. Fakat bu yöntem ile resim içerisinde karakterler yatay oldukça, sonuç alma ihtimali de azalıyor. Fakat bir çok hazır kütüphane bu yöntemi kullandığı için ve Amerika'yı yeniden keşfetmemek için biz de bu yöntemi kullanacağız.Bu yöntemi kullanan hazır kütüphaneler ise , Aforge , Microsoft Office Document Imaging (MODI) , tesseract , ... Daha gelişmiş olarak ise EmguCV'yi kullanabilirsiniz. </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Biz bu kütüphaneler içerisinden tesseract' ı kullanacağız. Bunun için kodlar aşağıdaki şekilde olmalıdır. </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">public Form1()</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> InitializeComponent();</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> // aşağıdaki kod ile indirmiş olduğumuz tessdata klasörü ile tesseract engine i başlatıyoruz.</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> _ocr.Init("tessdata", "eng", Tesseract.OcrEngineMode.OEM_DEFAULT);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> _ocr.SetVariable("tessedit_char_whitelist", "0123456789");</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> private void DoOcr(string file)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var result = "";</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> try</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> Image<Bgr, Byte> image = new Image<Bgr, byte>(file);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> _ocr.Recognize(image);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> var characters = _ocr.GetCharactors();</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> foreach (var c in characters)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> result += c.Text;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> image.Dispose();</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> result = Regex.Replace(result, "[^0-9]+", "").Replace('o', '0');</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> catch (Exception exception)</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> {</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> MessageBox.Show(exception.Message);</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> label1.Text = result;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;"> }</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Yukarıdaki DoOcr fonksiyonumuz , verilen captcha resim yolundaki resim içerisindeki harfler detect edip sonuç olarak verir.</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Tüm işlemler tamamlandıktan sonra kırmaya çalıştığımız captcha resmi ; </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/4442.captcha.png" style="background-color: white; color: #00749e; cursor: pointer; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px; outline: none; text-decoration: none;"><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/350x0/__key/communityserver-wikis-components-files/00-00-00-00-05/4442.captcha.png" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></a><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Siyah beyaz yaptıktan ve maskeleme methodunu uyguladıktan sonra ki hali </span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/3482.deneme.jpg" style="background-color: white; color: #00749e; cursor: pointer; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px; outline: none; text-decoration: none;"><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/350x0/__key/communityserver-wikis-components-files/00-00-00-00-05/3482.deneme.jpg" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></a><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Median filtre uyguladıktan sonraki hali ,</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/1680.denemeMedian.jpg" style="background-color: white; color: #00749e; cursor: pointer; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px; outline: none; text-decoration: none;"><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/350x0/__key/communityserver-wikis-components-files/00-00-00-00-05/1680.denemeMedian.jpg" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></a><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Programın çalışmış ve sonucu vermiş hali ise ,</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/1172.sonuc.png" style="background-color: white; color: #00749e; cursor: pointer; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px; outline: none; text-decoration: none;"><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/350x0/__key/communityserver-wikis-components-files/00-00-00-00-05/1172.sonuc.png" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></a><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Referans etmeniz gereken kütüphaneler ise ;</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/3005.kutuphaneler.png" style="background-color: white; color: #00749e; cursor: pointer; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px; outline: none; text-decoration: none;"><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/550x0/__key/communityserver-wikis-components-files/00-00-00-00-05/3005.kutuphaneler.png" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></a><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><span style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Umarım faydalı olmuştur değerli okurlar. Bir sonraki makalede görüşmek dileğiyle esen kalın, teknoloji ile kalın.</span><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><strong style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">Koray Düzgün </strong><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><br style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;" /><strong style="background-color: white; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16.9545593261719px;">MCTS </strong>Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-83014873036551062082014-09-03T06:04:00.003-07:002014-09-03T06:04:50.458-07:00Entity Framework Tablo Bağımsız CRUD İşlemleri - dbContext.Entry(Entity).State = System.Data.EntityState.Added;<h1 class="post-name" style="background-color: white; clear: both; color: #707070; font-family: 'Segoe UI Light', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 36px; font-weight: 100; line-height: 1.3; margin: 0px;">
Entity Framework Tablo Bağımsız CRUD İşlemleri tr-TR</h1>
<div class="post-content user-defined-markup" style="background-color: white; border: 0px; color: #2a2a2a; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 1.4; max-width: 100%; overflow: hidden; padding: 10px 0px; position: relative;">
<strong>Merhabalar ,<br /><br />Entity Framework kullanarak database uygulaması geliştirirken herhangi bir tablo üzerinde Crud(Create-Update-Delete) işlemleri yaparken ilk olarak hangi tablo üzerinde işlem yapılacağının bilinmesi gerekir. Daha sonra Update ve Delete işlemlerinde silinecek veya düzenlenecek olan kaydı bulup hangi tabloda ise gerekli işlemleri yapmamız gerekir.Geniş çaplı bir projeniz olduğunu düşünün ve tüm bu işlemleri her bir tablo işlemi için yaptığınızı düşünün. Tüm bu işlemleri tablo ayırt etmeden tek bir class içerisinde yaptığımızda kazanılacak zaman ve hız ciddi anlamda önem kazanmaktadır. Hoş genelde bu tarz klasik ve kolay olan işlemleri genelde junior developper lar yapar ama olsun :)<br /><br />Şimdi tablo farketmeksizin CRUD işlemlerini nasıl yapacağımızı görelim. </strong><ul>
<li><span style="font-size: 12.1px;"><strong>İlk olarak tabi ki Entity Database Model'imizi oluşturmamız gerekmektedir.</strong></span></li>
<li><span style="font-size: 12.1px;"><strong>Daha sonrasında kodlarını hazır olarak vereceğim class'ın kullanılacağı projenin içerisine Entity Framework 5.0.0.0 versiyonunu kurmamız gerekmektedir. Bunun için yapmamız gereken ise ilk olarak resimdeki yerden Package Manager Console'u açmamız gerekir.</strong></span></li>
<li><span style="font-size: 12.1px;"><strong><br /></strong></span></li>
<li><span style="font-size: 12.1px;"><strong><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/508362.1.jpg" style="color: #00749e; cursor: pointer; font-weight: normal; outline: none; text-decoration: none;"><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/550x0/__key/communityserver-wikis-components-files/00-00-00-00-05/508362.1.jpg" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></a></strong></span></li>
</ul>
<div>
<strong><br /></strong><ul>
<li><strong>Daha sonra açılan pencerede : <span style="color: #548dd4;">install-package entityframework -version 5.0.0.0</span> yazıp, entity framework paketinin hangi projeye yukleneceği secildikten sonra Enter'a basıp yüklemeyi tamamlayabiliriz.</strong></li>
</ul>
<div>
<strong><br /></strong><ul>
<li><a href="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/8738.2.jpg" style="color: #00749e; cursor: pointer; outline: none; text-decoration: none;"><strong><img alt=" " src="http://social.technet.microsoft.com/wiki/resized-image.ashx/__size/550x0/__key/communityserver-wikis-components-files/00-00-00-00-05/8738.2.jpg" style="border-style: solid; border-width: 0px; height: auto !important; max-width: 100%; overflow: hidden;" /></strong></a></li>
</ul>
<div>
<strong><br /></strong><ul>
<li><strong>Entity Framework kurulumlarını yaptıktan sonra bir Class oluşturup aşağıdakı kodları kullanabiliriz.</strong></li>
</ul>
<div>
<br /><strong><em><span style="color: #548dd4; font-size: 13px;"> public string Add(System.Data.Entity.DbContext dbContext,object Entity)<br /> {<br /> try<br /> {<br /><span class="Apple-tab-span" style="white-space: pre;"></span><br /> dbContext.Entry(Entity).State = System.Data.EntityState.Added;<br /> dbContext.SaveChanges();<br /> return "Başarılı";<br /> }<br /> catch<br /> {<br /> return "Hatalı";<br /> }<br /> }<br /><br /> public string Edit(System.Data.Entity.DbContext dbContext, object Entity)<br /> {<br /> try<br /> {<br /> dbContext.Entry(Entity).State = System.Data.EntityState.Modified;<br /> dbContext.SaveChanges();<br /> return "Başarılı";<br /> }<br /> catch<br /> {<br /> return "Hatalı";<br /><br /> }<br /> }<br /><br /> public string Delete(System.Data.Entity.DbContext dbContext, object Entity)<br /> {<br /> try<br /> {<br /> dbContext.Entry(Entity).State = System.Data.EntityState.Deleted;<br /> dbContext.SaveChanges();<br /> return "Başarılı";<br /> }<br /> catch<br /> {<br /> return "Hatalı";<br /> }<br /> }</span></em></strong><br /><ul>
<li><strong>Son olarak da aşağıda bu methodları nasıl kullanacağımızın kodları mevcuttur.</strong></li>
</ul>
<div>
<strong><em> <span style="color: #548dd4; font-size: 13px;"> var service = new Service.BaseCrudService();<br /> var kategori = new Data.Category<br /> {<br /> CategoryID = 11,<br /> CategoryName = "deneme1",<br /> Description = "acıklama1",<br /> Picture = null<br /> };<br /> service.Add(new Data.NorthwindEntities(), kategori);</span></em><br /><br />Yapacağımız işlemlerin hepsi bu kadar. Böylelikle CRUD işlemlerini tek bir Class içerisinde sadece bir kez yazmış olduk ve daha güzel olan tüm tablo ve tüm modeller için geçerli oldu.<br /><br />Şuan Dynamic Lambda Expression üzerinde çalışıyorum.Her türlü search işlemlerini kabul eden ve gene model ve tablo bağımsız çalışan bir Class yazmayı hedefliyorum.Bitti anda hemen sizlerle paylaşacağım.<br /><br />Görüşmek üzere.<br /><br />Koray Düzgün.</strong></div>
</div>
</div>
</div>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-50019669358825387642014-08-26T04:46:00.000-07:002014-08-26T04:46:48.447-07:00Sql Tablo Owner Değiştirme ( How to change ownership table Sql)Merhaba arkadaşlar,<br />
<br />
Bugün sizlere database üzerinde önceden farklı kullanıcı bilgileri ile oluşturduğumuz tabloların kullanıcı owner bilgisini nasıl değiştireceğimizi göstereceğim. Tek yapmamız gereken ilgili database üzerinde çalışacak yeni bir query penceresi açıp içerisine,<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DttRofq9gPUYAOg5KJHwVBX05F74Ns0i1eeYHlrCYQWjJjaU5_fcOM6W_rGzcbNjLorQ5Nm4v8tjCw92wZVpAg3bP6k2FcPGLhSYdnuA8HTePqfB6fbk7QRUImXJ_7DbfB6Ca1xIaOy2/s1600/sp_changeobjectowner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DttRofq9gPUYAOg5KJHwVBX05F74Ns0i1eeYHlrCYQWjJjaU5_fcOM6W_rGzcbNjLorQ5Nm4v8tjCw92wZVpAg3bP6k2FcPGLhSYdnuA8HTePqfB6fbk7QRUImXJ_7DbfB6Ca1xIaOy2/s1600/sp_changeobjectowner.png" height="24" width="640" /></a></div>
<br />
<br />
sql komutunu yazıp çalıştırmak. Bu komutla sadece tablo owner bilgisini değil database üzerinde var olan nesnelerin owner bilgilerini de değiştirebilirsiniz.<br />
<br />
Bir sonraki makale veya ipuçlarında görüşmek dileğiyle.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-29657052159879220262014-06-17T07:48:00.000-07:002014-06-17T07:48:08.838-07:00Chromium Embeded Framework Cookie İşlemleri (SetCookie,DeleteCookie)Merhabalar arkadaşlar CEF ( Chromium Embeded Framework) ile ilgili önceki makalelerimde embed yapmayı ve User agent bilgisinin değiştirilmesini paylaşmıştım.Bu makalemde ise Cef kullanarak Cookie oluşturma ve silme işlemlerinin nasıl yapıldığından bahsedeceğim.<br />
<br />
Cef kullanarak Cookie oluşturmak için ,<br />
<br />
CefSharp.CEF.SetCookie("Cookie oluşturan url", "Cookie oluşturan url in domaini", "cookie name", "cookie value",CookieExpriedTime);<br />
<br />
Cef kullanarak Cookie silmek için ise ,<br />
<br />
CefSharp.CEF.DeleteCookies("Oluşturulan cookienin url i", "cookie name");<br />
<br />
Sadece bu kadar. Bir sonraki makalemde görüşmek üzere.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-50799072086779695402014-06-17T07:35:00.000-07:002014-06-17T07:35:09.404-07:00Chromium Embeded Framework User Agent Değiştirme(Change)Merhabalar arkadaşlar ,<br />
<br />
Bir önceki makalemde sizlerle .net ortamında windows form application içerisine Chromium Embeded Framework'u nasıl embed edildiğini paylaşmıştım. Bu makalemde ise embed ettiğimiz CEF üzerinden bağlantı sağlanırken User-Agent bilgisini nasıl değiştirildiğini paylaşacağım.<br />
<br />
CEF'i başarılı bir şekilde embed ettikten sonra yapmanız gereken global değişken olarak ,<br />
<br />
private readonly CefSharp.WinForms.WebView CefBrowser;<br />
CefSharp.Settings ayar = new CefSharp.Settings();<br />
<br />
tanımlamak.Daha sonrasında ise IRequestHandler interface ini formunuza implemente etmeniz gerekmektedir.Ve son olarak Form'unuzun constructure kısmına aşağıdaki kodları yazmanız yeterli olacaktır.<br />
<br />
ayar.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";<br />
CEF.Initialize(ayar);<br />
CefBrowser= new WebView();<br />
CefBrowser.Dock = DockStyle.Fill;<br />
CefBrowser.RequestHandler = this;<br />
CefBrowser.Address = "www.google.com";<br />
this.Controls.Add(CefBrowser);<br />
<br />
Umarım faydali olmuştur.Bir sonraki makalemde görüşmek üzere.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-76845390739062212842014-06-17T00:55:00.000-07:002014-06-17T00:55:48.471-07:00Chromium Embeded Framework .Net C# Windows FormsMerhabalar arkadaşlar,<br />
<br />
Bugün sizlere windows form application içerisine chrome'u nasıl embed edeceğimizi anlatacağım.İnternet üzerinde araştırma yaptığımda ingilizce kaynaklarda bir kaç tane yapılmış örnek uygulamalar mevcut fakat indirip denediğimde hiç biri çalışmıyor ya da ben yapamadım :D. Türkçe kaynak ise doğru düzgün bulamadığım için paylaşmak istedim.<br />
<br />
İlk başta aşağıdaki linkte gerekli olan .dll dosyaları mevcuttur.<br />
<br />
<a href="https://www.dropbox.com/s/dl4d4ht1xmysnaf/CefSharp-1.25.0.7z" target="_blank">https://www.dropbox.com/s/dl4d4ht1xmysnaf/CefSharp-1.25.0.7z</a><br />
<br />
Benim yapmış olduğum örnek uygulama ise ,<br />
<br />
<a href="https://www.dropbox.com/s/jw5gvhtafvin3wq/chromeEmbed.rar" target="_blank">https://www.dropbox.com/s/jw5gvhtafvin3wq/chromeEmbed.rar</a><br />
<br />
Kendi uygulamanıza direk eklemek istiyorsanız yapmanız gereken adımlar şu şekilde olmalıdır ,<br />
<br />
1.) Vermiş olduğu ilk linkteki .dll leri indirin.<br />
2.) CefSharp.dll , CefSharp.Example.dll ve CefSharp.WinForms.dll projenize referans olarak ekleyin.<br />
3.) İndirmiş olduğunuz .dll dosyalarının hepsini projenizin ../Debug/bin/ klasörü içerisine kopyalayın.<br />
4.) using CefSharp.WinForms; kodu ile namespace i using tag ına ekleyin.<br />
5.) CefSharp.WinForms.WebView wb = new WebView();<br />
wb.Dock = DockStyle.Fill;<br />
wb.Address = "www.google.com";<br />
this.Controls.Add(wb);<br />
kodları ile formunuza ekleyebilirsiniz.<br />
<br />
Yapmanız gerekenler sadece bu kadar. Eğer cookie oluşturmak istiyorsanız ,<br />
<br />
CefSharp.CEF.SetCookie(); kodunu kullanmanız gerekmektedir.<br />
<br />
Umarım faydalı olur. Bir sonra ki makalemde görüşmek üzere.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-75844163554465060682014-04-05T01:38:00.002-07:002014-04-05T01:41:19.591-07:00"Database Diagram Support objects cannot be installed" ÇözümüMerhaba arkadaşlar,<br />
<br />
MSSQL üzerinde bulunan databse'inizde ilişki oluşturmak istiyorsanız ve aşağıdaki hatayı alıyorsanız eğer ,<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtC9CCkNDqBuu2zzfgCZDZZGQaD8DlBh2e9-qth4ZEYlUaIv9jrCsycnRPkdA2-kK2wYcMEEoup3GAEIhQ56YrpLW39_a-6LJsxBfnG6y7qW1FBvBmhyphenhyphenBnvjT9IGTM-fkQq_I1_SmUFSH8/s1600/aut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtC9CCkNDqBuu2zzfgCZDZZGQaD8DlBh2e9-qth4ZEYlUaIv9jrCsycnRPkdA2-kK2wYcMEEoup3GAEIhQ56YrpLW39_a-6LJsxBfnG6y7qW1FBvBmhyphenhyphenBnvjT9IGTM-fkQq_I1_SmUFSH8/s1600/aut.png" /></a></div>
<br />
yapmanız gereken yeni bir query sayfası açıp aşağıdaki query'i yazıp çalıştırmanız yeterli olacaktır.<br />
<br />
<pre class="lang-sql prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 17.804800033569336px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">ALTER</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">AUTHORIZATION</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">ON</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">DATABASE</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">::</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">DatabaseIsmi </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">TO</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">KullaniciAdi</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">];</span></code></pre>
<br />
Kullanici adi bölümüne sql server üzerinde var olan kullanıcıları direk olarak yazabilirsiniz. Eğer windows authorization ile işlem yapmak ve bu kullanıcının yetkisini düzenlemek istiyorsanız yapmanız gereken ,<br />
<br />
<pre class="lang-sql prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 17.804800033569336px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">ALTER</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">AUTHORIZATION</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">ON</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">DATABASE</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">::</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">DatabaseIsmi </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">TO</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">PcAdi\PcKullaniciAdi</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">];</span></code></pre>
<br />
Umarım faydalı olur. Görüşmek dileğiyle ...Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-41712306603290498192013-07-10T06:16:00.003-07:002013-07-10T06:16:53.835-07:00web service parser error could not create type .net framework 4.0Merhaba arkadaşlar ,<br />
<br />
bugün web servisler ile ilgili yaşadığım sorunu ve çözümü sizlerle paylaşacağım . Öncelikle durum şudur ; E-Ticaret sisteminin içerisinde Web Service projesi oluşturdum. Gerekli kodları yazdım . Yayında olan E-Ticaret sisteminin ftp server ına servislerimi yukleyecektim. Web Servis projeme sağ tıklayıp Publish dedikten sonra oluşturduğu dosyaları ftp nin içerisine attım . Ftp nin içerisinde Web Projem de olduğu için bu projenin bin klasorü de mevcut idi. Daha sonra bir klasor altına Web Service projemin publish dosyalarını upload ettim. Ornegin : http://www.xxx.com/Servisler/servisadi.asmx olarak browser a girdiğimde karşıma ;<br />
<br />
<span style="border: 0px; color: #2b91af; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><%</span><span style="border: 0px; color: blue; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">@</span><span style="border: 0px; color: #2b91af; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"> </span><span style="border: 0px; color: #a31515; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">WebService</span><span style="border: 0px; color: #2b91af; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"> </span><span style="border: 0px; color: red; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Language</span><span style="border: 0px; color: blue; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">="C#"</span><span style="border: 0px; color: #2b91af; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"> </span><span style="border: 0px; color: red; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">CodeBehind</span><span style="border: 0px; color: blue; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">="<span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;">servisadi</span>.asmx.cs"</span><span style="border: 0px; color: #2b91af; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"> </span><span style="border: 0px; color: red; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Class</span><span style="border: 0px; color: blue; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">="BHI.Rats.<span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;">servisadi</span>"</span><span style="border: 0px; color: #2b91af; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"> %></span><br />
<br />
şeklinde bir hata çıktı. Bu hatanın sebebi ise , ftp nin içerisinde Web Projemin oluşturduğu var olan bin klasörü ile Servisler klasörünün içinde bulunan bin klasörünün karışıklık oluşturmasıdır. Yani ben http://www.xxx.com/Servisler/servisadi.asmx olarak ilgili servisi çağırdığımda ilk olarak ana dizindeki bin klasörünün içerisinde servis projemin dll dosyasını arayıp bulamadı için bu şekilde bir hata meydana gelmektedir.<br />
<br />
Çözüm ise çok basit . Ana dizindeki bin klasörüne web service projenizin .dll dosyasını atmanı ve çalıştırmanız yeterli olacaktır.Yani kısaca class property sinde yazdığınız classı bu bin klasöründe bulunan dll dosyasında aramasıdır.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com12tag:blogger.com,1999:blog-4071857482116442561.post-57270030911902864222013-07-06T02:11:00.000-07:002013-07-06T02:11:42.656-07:00Asp.Net Web Sitemde Routing Çalışmıyor. Asp.Net Routing AyarlarıMerhaba arkadaşlar. Bugün sizlere ASP.NET ile web sitesi geliştirdiğiniz projelerinizde eğer Routing kullanırsanız yüksek ihtimalle karşılaşacağınız sorunun çözümünü paylaşacağım. İlk olarak routing yapısını kullandıysanız hosting panelinizden ASP.NET ayarlarından Pipeline Mode ayarını Classic den INTEGRATED olarak kaydetmeniz gerekecektir. Gerekli olan hosting ayarını yaptıktan sonra ise Web Site projeniz içerisinde bulunan Web.config dosyanıza Configuration tag ları arasına aşağıdaki configuration satırlarını eklemeniz gerekecektir.<br />
<br />
<system.webServer><br /> <modules runAllManagedModulesForAllRequests="true"><br /> <remove name="UrlRoutingModule"/><br /> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /><br /> </modules><br /> <handlers><br /> <add<br /> name="UrlRoutingHandler"<br /> preCondition="integratedMode"<br /> verb="*" path="UrlRouting.axd"<br /> type="System.Web.HttpForbiddenHandler, System.Web, <br /> Version=2.0.0.0, Culture=neutral, <br /> PublicKeyToken=b03f5f7f11d50a3a"/><br /> </handlers><br /> </system.webServer><br />
<br />
Tüm yapmanız gereken bu kadar. Eğer hosting panelinizde bahsettiğim ayarı bulamazsanız mutlaka hosting firmanızla iletişime geçiniz. Bu ayarı yapmazsanız eğer sisteminiz tekrar 404 hatası verecektir.<br />
<br />
Umarım faydalı olmuştur.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-87805642622383988632013-05-27T14:27:00.001-07:002013-05-29T14:47:02.924-07:00"A potentially dangerous Request.Form value was detected from the client" Hatası ve ÇözümleriMerhaba arkadaşlar. Bugün proje geliştirirken aldığım hatanın sebebini ve çözümlerini sizlerle paylaşacağım. Hatanın sebebi web projenizde herhangi bir sayfanızda herhangi bir yerinden girdi olarak HTML girdisi alınıyorsa direk olarak bu hatayı fırlatıyor. Asp.Net kendisi bu şekilde bir nebze de olsa güvenlik sağlamaya çalışıyor. Fakat bazen öyle durumlar oluyor ki kullanıcan HTML içerikli girdi almak durumunda kalıyorsunuz. Bu durumlar da yapılması gereken ilk şey farklı bir editör kullanmak. Örneğin CKEditor gibi. Fakat benim şuan geliştirdiğim uygulamda kullanıcıdan Google Map embed linki almam gerekiyor. Bunun için CkEditörü sayfaya import edip yüklenmesini sağlayıp sayfayı yavaşlatmak saçma ve gereksiz olur. Bu nedenle klasik ve düz TextBox kullanıyorum. Bu durumda da html girdi olduğu için direk bu hatayı fırlatıyordu. Bu sorunun birden fazla çözümü mevcuttur .<br />
<br />
1-) Web.config dosyamıza <system.web> tag ının altına <pages validateRequest="false"/> tag ı eklenir.<br />
<br />
2-) Bu şekilde veri girdisi sadece o page de olacaksa daha özele inip , ilgili page in <%@Page tagına <b>validateRequest="false" </b>eklenir.<br />
<br />
3-)Eğer bunları yapıp hala aynı hatayı alıyorsanız muhtemelen Visual Studio 2010 ve 4.0 ile projenizi geliştiriyorsunuz demektir. Bu durumda ise Web.config dosyamıza <system.web> tag ının altına <httpRuntime requestValidationMode="2.0" /> tag ı eklenir.<br />
<br />
Umarım faydalı olmuştur arkadaşlar. Bir sonraki makalemde görüşmek üzere.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com2tag:blogger.com,1999:blog-4071857482116442561.post-23786563672330739792013-05-22T10:50:00.000-07:002013-05-22T10:50:21.256-07:00Entity FrameWork .Net Framework 4.5 Projelerinde Transaction KullanımıMerhaba arkadaşlar ,<br />
<br />
Geliştirmekte olduğum projemin içerisinde database işlemlerini yaptığım methodlarda transaction kullanmam gerekti.Daha önce .Net Framework 4.0 ile geliştirdiğim projelerimde Transaction yapısını kullanmıştım. Fakat şuan ki projemi .Net 4.5 ile geliştiriyorum.Transaction işlemi için .Net 4.0 da kullanmış olduğum ,<br />
<br />
<br />
using (TransactionScope scope = new TransactionScope())<br />
{<br />
}<br />
<br />
bloğunu tekrar kullanmam gerekiyordu. Fakat bu şekilde yazında TransactionScope Class ının içerisinde bulunduğu Library 'i görmedi. Bunun için uyguladığım çözüm ise ;<br />
<br />
Solution içerisinde transaction uygulanacak sınıfın ait olduğu project teki references kısmına sağ tıklayıp Add Reference dedim . Çıkan listede System.Transactions olması gerekiyor.Bu listenin içerisinde göremiyorsanız siz de benim gibi , penceredeki Browse butonuna tıklayın ve aşağıdaki dizine konumlanın .<br />
<br />
<span style="background-color: #eeeeee; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;">C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\</span><br />
<span style="background-color: #eeeeee; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"><br /></span>
Daha sonra bu klasörün içerisinde System.Transactions.dll dosyasını seçin ve Ok butonuna basın. Bu şekilde referas olarak ekledikten sonra transaction uygulanacak sınıfınıza geri dönün. Ve<br />
<br />
Using System.Transactions;<br />
<br />
satırını ekleyin. Artık<br />
<br />
<br />
using (TransactionScope scope = new TransactionScope())<br />
{<br />
}<br />
<br />
scope larının içerisine yazacağınız tüm database işlemlerine transaction uygalanacaktır.Yani bir işlem başarısız olursa eğer , bu scope içerisindeki tüm database işlemleri geri alınacaktır.<br />
<br />
Umarım faydalı olmuştur. Görüşmek üzere.<br />
<br />
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com1tag:blogger.com,1999:blog-4071857482116442561.post-15730500392820619522013-05-09T10:41:00.000-07:002013-05-09T10:41:06.557-07:00Unable to update the EntitySet 'Slider' because it has a DefiningQuery and no element exists in the element to support the current operation. Hatasının ÇözümüMerhaba arkadaşlar. Bugün proje geliştirirken karşıma çıkan hatanın çözümünü sizinle paylaşacağım.Öncelikle hatayı Entity Framwork kullanarak veri tabanındaki bir tabloya kayıt eklerken aldım. Daha sonra bu hatanın çözümü için uyguladığım seçenekler ise ,<br />
<br />
1-) Projemdeki modeli güncellemek ,<br />
2-) Veri tabanındaki ilişkileri kontrol etmek ,<br />
3-) Projemdeki modeldeki ilişkileri kontrol etmek ,<br />
4-) Google ' a sormak :)<br />
<br />
ve 4. seçenekte www.stackoverflow.com sitesinde karşıma çıkan öneriyi denedikten sonra sorunum çözüldü. Sorun aslında yapılmaması gereken bir hatadan kaynaklanıyormuş. Veri ekleme işlemi yaptığım tabloyu oluşturduğumda Primary Key belirtmediğimden dolayı hata alıyormuşum.<br />
<br />
Yani kısaca sorunu ilgili tabloma Primary Key alanı ekleyerek , daha sonra da projemdeki modeli güncelleyerek çözmüş bulunmaktayım.<br />
<br />
Umarım yardımcı olmuştur.Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-57298940258352897852013-04-11T13:13:00.000-07:002013-04-11T13:13:38.151-07:00Method not found: 'System.Data.Entity.DbSet`1 Entitiy.get_Markas()'. HatasıMerhabalar arkadaşlar. Bu makalemde tam 3 saatimi alan ve aklıma gelen her yolu denediğim internetten de pek çözüm bulamadım <b>Method not found: 'System.Data.Entity.DbSet`1<Entitiy> Entitiy.get_Markas()'. </b>Hatasının çözümünü anlatacağım. Umarım karşılaşmazsanız ve umarım internette aradığınızda benim sayfama çabuk ulaşırsınız :)<br />
<br />
Çözüm için denediklerim ,<br />
<br />
- Hatayı fırlatan methodun içinde bulunduğu projedeki entity framework paketini güncellemek.<br />
- Model içerisindeki entity i kontrol etmek ,<br />
- model.edmx.diagram dosyasını incelemek ,<br />
- modeli update etmek ,<br />
- modeli silip yeniden kaldırmak ,<br />
- Hatayı fırlatan methodun içinde bulunduğu projedeki config dosyasındaki connection string i güncellemek ....<br />
<br />
Ama tüm bunların hiç biri işe yaramadı . En son sinirlenip Visual Studio 2012 IDE sini kapattım. 2 dk sonra tekrar proje açtığımda ise her şey tıkır tıkır çalışıyordu.<br />
<br />
Yani ya bu üstteki yaptıklarımdan dolayı çözüme ulaştım ama bana yansımadı ya da bu hatanın tek bir çözümü var <b>KAPAT - AÇ ... </b><br />
<br />
Şaka gibi ama gerçek :)<br />
<br />
Kolay gelsin...Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-12430662824613647102013-02-22T09:43:00.002-08:002013-02-22T09:45:27.942-08:00LINQ Nedir ? (Giriş) <br />
Merhaba arkadaşlar , daha önceki makalelerimde sizlere Entity Framework ve ORM hakkında giriş bazlı bilgi vermiştim. Bu makalemde sizlere entity framework kullanarak var olan database üzerinden nasıl sorgulama yapacağımızı anlatmaya çalışacağım.Peki nasıl sorgulama yapacağım ? Veri tabanı üzerinde sorgulama yapabilmem için benim programım ile veri tabanı arasında bir bağ oluşturmam gerekir.Bu bağı da ya ADO.NET mimarilerinden biri ile ya da herhangi bir ORM tool u ile sağlayabilirim veya third party component ile sağlayabilirim.Bu makalemde ise ORM kullanarak var olan bir veri tabanı üzerinde sorgulama işlemi yapacağız.<br />
<br />
Eğer ADO.NET mimarilerinden biri ile bağlantı sağlayacak olsaydık , mutlaka o veri tabanı üzerinde sorgulama işlemi yapmak için SQL kullanmak zorunda kalacaktık.<br />
<br />
Peki ORM yani Microsoft tarafındaki ORM tool olan Entity Framework ile sorgulama işlemini nasıl yapacağız ?<br />
- Elimizde bu işlem için uygun çok güzel bir teknoloji var :)<br />
<br />
Tekrar SQL mi kullacağız ?<br />
- Tabi ki Hayır.<br />
<br />
Peki nedir bu teknoloji ?<br />
- LINQ.<br />
<br />
Bana sağlayacağı sadece Sql yazma derdinden mi kurtarmak ?<br />
- Tabi ki de hayır. Şimdi entity framework kullanırsanız eğer , veri tabanı modelinizi projenize import ettikten sonra model üzerinde bulunan her bir tablo bize object olarak sunuluyor.Ben oop ile harmanlayarak sorgulama yapmak istediğim tablolar arasından ilgili alanlar için bir class içerisine property tanımlayarak , istediğim şekilde verileri çeker alırım.Böylelikle hem veri tabanımın güvenliği artmış olur hem benim kod yazmam hızlanır , hem projem daha düzgün gözükür , gereksiz bir çok tür dönüşümü ile uğraşmam , gereksiz veriler arasında dolanıp durmam ... Daha bir çok faydası mevcuttur.<br />
<br />
Peki tüm bu sunulanlar çok güzel. Fakat ya hız ?<br />
- Ado.Net daha verimli çalışmakta.<br />
<br />
LINQ ' i sadece veri tabanı sorgulama işlemlerinde mi kullanabilirim ?<br />
- Hayır. Object List ' lerin hepsinde kullanabilirsiniz.<br />
<br />
<br />
Umarım giriş bölümünden kafanızda LINQ ' i oluşturabilmişimdir.Niçin kullanılır ? Faydaları nelerdir ? SQL yerine neden LINQ kullanırım ? Nerelerde kullanırım ? gibi soruların cevabını verdikten sonra isterseniz LINQ ' in syntax ini inceleyelim.<br />
<br />
Aslında Linq syntax i eğer sql komutları yazdıysanız daha önceden size hiç de yabancı gelmeyecektir.Çünkü linq yazımında kullanılan keyword ler sql keyword leri ile neredeyse aynı.Basit bir örnek üzerinde syntax i görelim.<br />
<br />
Mesela veri tabanımızdan çalışanlar ile ilgili tüm verileri tek bir tablo üzerinden çekecek olursak ,<br />
<br />
<br />
<br />
<br />
<span style="color: blue;">var </span>TumCalisanlar = <span style="color: blue;">from </span>calisanlar <span style="color: blue;">in </span>calisanListesi<br />
<span style="color: blue;">select </span>calisanlar;<br />
<br />
<br />
<br />
<br />
Evet arkadaşlar ben bu sorgulama işlemini eğer sql kullanarak yapacak olsaydım eğer ,<br />
<br />
select * from calisanListesi şeklinde bir sql komutu yazmam gerekecekti. Farkettiyseniz "from" ve "select" keyword leri aynı şekilde kullanılmıştır.Tek fark "in" keyword u.Lınq syntax i ile aslında biz şu şekilde emir veriyoruz ; "calisanListesi içerisindeki tüm verileri calisanlar diye bir değişkene aktar ve bu değişkenin içerisindeki tüm herşeyi seç ve TumCalisanlar değişkenine bu seçitiklerini ata." diyoruz. Böylelikle bana son derece esnek bir yapı sağlanmış oluyor.Ben linq kullanarak C# yapısında bulunan türleri , kendi oluşturduğum class ları , objeleri aslında Sql komutları ile birleştiriyorum.Böylelikle bir tarafta sql yazayım sonucunu alayım sonra C# üzerinde işlemler yapayım dönüşümleri sağlayım falan filan gibi gereksiz bir çok işlemden kurtulmuş oluyorum.<br />
<br />
Peki bir tablodan veri çekerken ben bir filtreleme işlemi gerçekleştirmek istiyorum.Nasıl yaparım ?<br />
<br />
- Bu sorunun cevabını hem sql ile hem de linq ile vereceğim . Sql kullanırsak eğer ;<br />
select * from calisanListesi where yas>30 (gibi bir filtreleme işlemi olsun)<br />
<br />
Bu işlemin linq tarafı ise şu şekilde ;<br />
<br />
<span style="color: blue;">var </span>TumCalisanlar = <span style="color: blue;">from </span>calisanlar <span style="color: blue;">in </span>calisanListesi <span style="color: blue;">where</span> calisanlar.Yas>30<br />
<span style="color: blue;">select </span>calisanlar;<br />
<br />
Görüldüğü gibi her iki sorgulama işleminde de filtreleme işlemi için "where" keyword u kullanılıyor.<br />
<br />
Peki bir tablodan sadece bir kolondaki tüm verileri nasıl çekerim ?<br />
<br />
- Sql kullanarak : select adi from calisanListesi<br />
<br />
- Linq kullanarak : <span style="color: blue;">from </span>calisanlar <span style="color: blue;">in </span>calisanListesi <span style="color: blue;">select </span>calisanlar.adi;<br />
<br />
<br />
<br />
Peki bir tablodan birden çok kolondaki bilgileri nasıl çekerim ?<br />
<br />
- Sql tarafında select ifadesinden sonra istediğiniz kolon isimlerini virgül ile yan yana yazarak alabilirsiniz.<br />
<br />
- Linq tarafında ise <span style="color: blue;">from </span>calisanlar <span style="color: blue;">in </span>calisanListesi <span style="color: blue;">select new </span>{ calisanlar.adi , calisanlar.yasi};<br />
<br />
olarak istediğiniz kolonları alabilirsiniz.Bu sayede bu sorgudan çıkan sonuç yeni bir tür olarak tutulur.Bu veri kümesini istediğiniz gibi kullanabilirsiniz.<br />
<br />
Peki birden çok tabloyu birleştirerek sorgulama işlemi nasıl yaparım ?<br />
<br />
-Sql tarafında : select * from calisanListesi join Yetkiler on calisanListesi.ID = Yetkiler.CalisanListesiID<br />
<br />
-Linq tarafında ise <span style="color: blue;">from </span>calisanlar <span style="color: blue;">in </span>calisanListesi <span style="color: blue;">join </span>yetkiListesi <span style="color: blue;">in </span>Yetkiler <span style="color: blue;">on </span>calisanlar.ID <span style="color: blue;">equals </span>yetkiListesi .CalisanListesiID<br />
<br />
Evet arkadaşlar basit anlamda Linq sorgulama işlemini anlatmaya çalıştım.Mümkün olduğu kadar sql ile kıyaslamalı örnekler vermemin nedeni zaten sql yazıyorsunuz , linq i görüp kaçmamanızı sağlamaktı :) Umarım faydalı olmuştur . Linq üzerinde bu makalede sadece sorgulama işlemi yaptık. Insert Update ve Delete işlemlerini başka bir makalemde anlatacağım.Linq i lambda expressions la kullanırsanız çok daha fayalı olacaktır.Lambda expressions ı da fırsat bulursam anlatacağım .<br />
<br />
Şimdilik bu kadar görüşmek dileğiyle ...<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com1tag:blogger.com,1999:blog-4071857482116442561.post-72747372007356425972012-05-16T12:01:00.000-07:002014-07-07T01:02:53.996-07:00Entity Framework Giriş ORM Nedir ?Merhaba arkadaşlar.Bu makaleyi şuan okuduğunuza göre daha önce ado.net ile uygulama geliştirmiş veya en kötü ihtimalle ado.net in ne olduğunu nasıl çalıştığını bir veri tabanına nasıl bağlantı yapıldığını ve uygulama içerisinden nasıl veri tabanı işlemleri yapıldığını biliyor olduğunuzu düşünüyorum arkadaşlar.Şimdi şu ana kadar ki uygulamalarımızda veri tabanı işlemlerini nasıl yapıyorduk ? Öncelikle veri tabanımızı oluşturup daha sonra uygulama tarafına geçip ilgili yerlere veri tabanı işlemleri yapan kodlarımızı yapıyorduk değil mi ? Yani şekil olarak resmetmek gerekirse ;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWDwsGWRz2oiXfGKQrQIzRU_IQRH-qkHDKIA40Mcvvo1TkdbUxlbu0BZrWgpOpOM6WMRnvZb-D_-tTeTIe679pyjyNWfWH-h7VtaOOhtffA14JeExAb8o_0XoylcvpaALzofwBrO8hqiQe/s1600/ado.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWDwsGWRz2oiXfGKQrQIzRU_IQRH-qkHDKIA40Mcvvo1TkdbUxlbu0BZrWgpOpOM6WMRnvZb-D_-tTeTIe679pyjyNWfWH-h7VtaOOhtffA14JeExAb8o_0XoylcvpaALzofwBrO8hqiQe/s400/ado.jpg" height="225" width="400" /></a></div>
Yukarıdaki şekle bakıldığında hangi platformda olursa olsun uygulamamız direk olarak bir veri tabanına bağlı durumda.Bu durumda uygulama üzerinden veri tabanını etkileyecek herhangi bir işlem yapmak istediğimizde sql ifadeleri kullanmak durumundayız.Peki bu sistemin nasıl dezavantajları var da bugün sizlere anlatacağım ORM araçları ortaya çıkmıştır ?<br />
<br />
<br />
<ul>
<li>Öncelikli olarak eğer bir veri tabanı uygulaması yazacaksanız kesinlikle sql bilmek zorundasınız.Aksi takdirde hiç bir şekilde veri tabanı işlemlerini uygulamanıza yaptıramazsınız. </li>
</ul>
<br />
<br />
<ul>
<li>İkinci olarak ise bu sistemde öncelikle database oluşturulup daha sonra uygulama üzerinden sql ifadeleri ile veri tabanı işlemleri yapılmaktadır.Bu durum da hem ekstra zaman kaybı ve ekstra iş kaybı yaşatmaktadır.Malumunuz üzere işverenin tek düşündüğü durum para olduğu için bizim gibi oldukça değerli olan yazılımcıların minimum zamanda maksimum iş çıkarmaları işveren için oldukça önemlidir.</li>
</ul>
<div>
<ul>
<li>Üçüncü bir dezavantajı ise tamamen database bağımlıdır.Yani çalıştığınız yer bir anda artık bundan sonra oracle yerine mssql kullanacağız dediğinde oturulup oldukça fazla düzenlemeler yapılmak zorundadır.Hele birde düşünün ki web uygulaması yapıyorsunuz.Bu database değişikliliğine uyumun çok kısa bir süre içerisinde olması gerekmektedir değil mi ? </li>
</ul>
</div>
<div>
<ul>
<li>Bir diğer dezavantajı ise yazılımcının database işlemleri arasında boğulup kaldığı için uygulamanın mantıksal kısımlarına gerektiği kadar zaman ayıramama durumu yaşamaktadır.</li>
</ul>
<ul>
<li>Son olarak da uygulamanız üzerinden database deki herhangi bir nesnenin tablo , view , sp hatta kolona kadar yapısal özelliklerini değiştirmek için uzun uzadıya sql ifadeleri yazmak zorundasınız.</li>
</ul>
<div>
Evet arkadaşlar şuana kadar kullandığınız yöntem ne kadar zormuş değil mi ? Şimdi sizlere öyle bir konu anlatacağım ki siz de ben neler çekiyormuşum diyeceksiniz :) Evet tahmin ettiğiniz gibi ORM ' e giriş yapacağız.</div>
</div>
<div>
<br /></div>
<div>
Şimdi arkadaşlar ORM nedir ? öncelikle bu sorunun cevabıyla başlayalım.Orm yani Object Relational Mapping , veri tabanınızdaki tabloları class lara , kolonları property lere , tabloların içindeki kayıtları da object lere dönüştüren ve tüm bu dönüşün sonucunda oluşan class lar ve objeler üzerinden veri tabanı işlemlerinizi yapmayı sağlayan bir teknolojidir.Yani kısaca tanımlamak gerekirse database modelini uygulama modelindeki nesnelere uyarlar.Aslında yaptığı iş tam olarak database modelini uygulamadan soyutlayarak nesneler üzerinden işlem yapmamızı sağlar.</div>
<div>
<br /></div>
<div>
Orm in ne olduğunu anladıktan sonra bir de şekle dökmek gerekirse ;</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbdgj0ORMwdUQq6CXKmhgjiks25F-UGk4V4uNRMf-UGievb0w-gZQKUH2BaLZ6k6OFFJWZtS7iJFQ5WUYDEg5JYCdkCqUmslSOQusgk_ccNWuQOLLyIGbBQ9mxbr8NFW23p03Yv4yCdaGy/s1600/ado.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbdgj0ORMwdUQq6CXKmhgjiks25F-UGk4V4uNRMf-UGievb0w-gZQKUH2BaLZ6k6OFFJWZtS7iJFQ5WUYDEg5JYCdkCqUmslSOQusgk_ccNWuQOLLyIGbBQ9mxbr8NFW23p03Yv4yCdaGy/s400/ado.jpg" height="174" width="400" /></a></div>
<div>
<br /></div>
<br />
<br />
Yukarıdaki şekle bakıldığında uygulama orm e bağlı olduğunu görebiliriz.Database le direk olarak herhangi bir bağlantısı söz konusu değildir.Peki burada bizim yapmak istediğimiz databse işlemlerimiz nasıl oluyor da sql ifadesi yazmadan gerçekleşiyor? . Uygulama tarafında oluşan nesneler üzerinden biz database işlemi yaptığımızda orm tarafından bu işlem sql ifadesine dönüştürülüyor.Bu işleme Code Generating işlemi denir.Tüm orm araçları aynı işlemi yaparlar.Mesela siz uygulamanızda bir nesne üzerinden bir tabloya kayıt ekleme işlemi yapmak istediğinizde orm otomatik olarak insert sql ifadesini oluşturup database e gönderir.Bu sayede sizin sql bilmenize gerek kalmamaktadır.<br />
<br />
Orm in ne olduğunu ve nasıl çalıştığını anladıktan sonra maddeler halinde avantajlarına ve dezavantajlarına bakalım arkadaşlar.<br />
<br />
Avantajları ;<br />
<br />
<ul>
<li>OOP olarak kod geliştirmeye imkan sağlamaktadır.<div class="MsoNormal">
</div>
</li>
<li>Sql bilmeden bir veri tabanına bağlanabilir ve sql ile
ilgili bir çok işlemi rahatlıkla yapabilmek.</li>
<li>Herhangi bir database bağımlılığı yoktur.</li>
<li>Oldukça esnek bir yapı sağlamaktadır.Yani oracle kullanıyorken bir anda mssql i kullanabiliriz.</li>
</ul>
<div>
Dezavantajları :</div>
<div>
<ul>
<li>Performans.Bir ado.net kadar hızlı çalışmamaktadır.</li>
<li>Database den bilgi alış-verişi sırasında kontrol %100 bizde değildir.Bazen oluşturulan sql ifadelerinde sorun çıkabilir veya biz daha güzel ve hızlı çalışacak sql ifadeleri yazabileceğimiz durumlar olabilir.Fakat tüm sql ifadelerini code generating ile kendi oluşturduğu için bu bir dezavantajdır.</li>
<li>Veri tabanı bağımsızdır.Fakat uygulama tarafındaki nesneler ile veri tabanındaki nesneler birbirine map edildiği için nesne bağımlılığı vardır.</li>
</ul>
<div>
Farklı platformlarda farklı farklı orm araçları mevcuttur arkadaşlar.Mesela java da Hibernate , microsoft ta , EntityFramework ... Aynı zamanda hibernate altyapısını kullanan ve .Net platformu için NHibernate orm aracı vardır.Daha bir çok araç mevcuttur.Fakat temelinde hepsi orm mantığı ile çalışırlar.</div>
</div>
<div>
<br /></div>
<div>
Elimden geldiğince ORM i anlatmaya çalıştım arkadaşlar.Sonraki makalelerimde Microsoft'un ORM araçlarından olan Entity Framework ü anlatacağım.Tekrar görüşmek dileğiyle ...</div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com3tag:blogger.com,1999:blog-4071857482116442561.post-26914741960240424282012-05-09T12:34:00.000-07:002017-03-31T04:13:38.098-07:00Sql Server Transaction Isolation LevelsMerhaba arkadaşlar. Bu makalemde sizlere transaction ile ilgili oldukça önemli konu olan Isolation Levels 'ı anlatacağım.Daha önceki makalelerimde transaction ı nasıl kullanacağımızı neden kullanacağımızı detaylı olarak anlatmıştım.Bu makalemde anlatacağım konu transaction ları izolasyon etme seviyelerinden bahsedeceğim.Yani diğer bir deyişle aynı anda aynı veriler üzerinde çalışan transaction ların nasıl çalışacaklarını veya nasıl sonuçlar alacaklarını belirleyebildiğimiz seviyelerden bahsedeceğim.<br />
<br />
Öncelikle native yani tüm veri tabanı sistemlerinin kabul ettiği 4 adet isolation level lar vardır.Fakat MSSQL Server ise bize bunlara ek olarak 2 adet isolation level sağlamaktadır.<br />
<br />
<b>1-)Read Uncommited(level 0)</b><br />
<b>2-)Read Commited(level 1)</b>
<br />
<b>3-)Repeatable Read(level 2)</b>
<br />
<b>4-)Serializable(level 3)</b>
<br />
<b><br /></b>
Bunlara ek olarak Mssql in bizlere sağladıkları ise ;<br />
<br />
<b>1-)Read Commited Snapshot Isolation</b><br />
<b>2-)Snapshot Transaction Isolation</b><br />
<b><br /></b>
Yukarıdaki isolation level ları incelemeden önce ortak zamanlı erişim sorunlarını anlatmak istiyorum arkadaşlar.Nedir ortak zamanlı erişim sorunları?Aynı anda birden fazla transaction ın veya session ın aynı veri üzerine erişmek istemesi ve işlem yapmak istemesi sırasında ortaya çıkabilecek olan sorunlardır.4 adet sorun karşımıza çıkmaktadır.<br />
<br />
<b>1-) Lost Updates:</b>Aynı anda birden fazla transaction aynı anda bir veri üzerinde güncelleme yapmak istediği zaman en son işlem yapan transaction ın kaydı geçerli olur.Bu yüzden veri kaybı yaşanır.<br />
<br />
<b>2-)Dirty Reads:</b>Bir transaction ın bir veri üzerinde yapmış fakat commit etmemiş olduğu bilgileri diğer transaction tarafından gerçek kayıtmış gibi okuması durumudur.<br />
<br />
<b>3-)Non-Repeatable Reads:</b>Bir transaction bir veriyi okusun ve kendi içinde işleme soksun.Bu transaction commit etmeden başka bir transaction bu veriyi okusun.Daha sonra işlem yapan transaction tekrar veriyi okumak istediğinde veri aynı veri olmayacağı için sorun yaşanmaktadır.<br />
<br />
<b>4-)Phantom Reads:</b>Aynı anda çalışan transaction düşünelim.Bir transaction bir tablodaki verilerin tamamını çeksin ve kendi içindeki işleme soksun.Bu sırada da diğer transaction aynı tabloya veri ekleme işlemi yapsın.Daha sonra ilk transaction tekrar verileri çekmek istediğinde yeni eklenen veriler hayalet veri olarak görünür.<br />
<br />
İşte tüm bu sorunlara çözüm olarak isolation level lar vardır.Hadi gelin şimdi onları inceleyelim arkadaşlar.<br />
<br />
<h2>
<b>Read Uncommited</b></h2>
<div>
Bir veri üzerinde bir kullanıcı transaction yaparken diğer kullanıcılarında değişikliğe uğramış fakat commit edilmemiş verileri görebilmesini sağlayan level'dır.Bu durum bize performans sağlar fakat verimizin güvenliğini elimizden alır neredeyse.Çünkü ya yapılan transaction commit edilmezse yani bir hata oluşur ve tüm yaptığı işlemleri rollback yaparsa ne olacak ? İşte bu durumda ortaya çıkan soruna <b>Dirty Read</b> denilir.Yani kısacası bir transaction işlemi yapılırken commit edilmese dahi diğer kullanıcılar transaction ın yaptığı işlemlerin sonucunu transaction sırasında görebilirler.Dirty reads,lost updates,non-repeatables reads ve phantom reads sorunları vardır.</div>
<div>
<br /></div>
<div>
Peki bu level ı nasıl kullanacağım ? </div>
<div>
<br />
<span style="color: blue; font-family: "courier new"; font-size: 10pt; line-height: 14px;">SET</span><span style="font-family: "courier new"; font-size: 10pt; line-height: 14px;"> <span style="color: blue;">TRANSACTION</span> <span style="color: blue;">ISOLATION</span> <span style="color: blue;">LEVEL</span> <span style="color: blue;">READ</span> <span style="color: blue;">UNCOMMITTED</span></span></div>
<div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Yukarıdaki gibi sql komutu ile oldukça basit bir şekilde aktif hale getirebiliriz.</div>
<div class="MsoNormal">
<br /></div>
<h2>
<b>Read Commited</b></h2>
</div>
<div>
Bu level da ise eğer bir veri üzerinde transaction uygulanıyorsa diğer transactionların bu veriye erişmesini engeller.Sql server'ın default level ı budur arkadaşlar.Daha önce denediniz mi bilmiyorum fakat eğer bir veri üzerinde bir tansaction işlemi yapılıyor ise sql server da o veriye erişim engellenir.Peki bu sırada diğer sorgular veya transactionlar ne olacak ? Veri üzerindeki transaction'ın sonlanmasını beklemekten başka hiç bir şansları yok :)Read Uncommited ın ortaya çıkardığı dirty read sorununu ortadan kaldırır.Fakat losts updates sorunu vardır.</div>
<div>
<br /></div>
<div>
<div>
Peki bu level ı nasıl kullanacağım ? </div>
<div>
<br /></div>
<div>
<div class="MsoNormal">
<span style="color: blue; font-family: "courier new"; font-size: 10pt; line-height: 15.3333px;">SET</span><span style="font-family: "courier new"; font-size: 10pt; line-height: 15.3333px;"> <span style="color: blue;">TRANSACTION</span> <span style="color: blue;">ISOLATION</span> <span style="color: blue;">LEVEL</span> <span style="color: blue;">READ</span> <span style="color: blue;">COMMITTED</span></span></div>
<div class="MsoNormal">
<span style="font-family: "courier new"; font-size: 10pt; line-height: 14px;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Yukarıdaki gibi sql komutu ile oldukça basit bir şekilde aktif hale getirebiliriz.</div>
<div class="MsoNormal">
<br /></div>
<h2>
<b>Repeatable Read</b></h2>
</div>
</div>
<div>
<b> </b>Diyelim ki bir transaction işlemleri arasında bir veriyi çekti ve işlem yapmaya başladı.İşlemini tamamlamadan yani commit edilmeden bir başka transaction veya kullanıcı o verideki değeri değiştirdi.Transaction işlemlerini yaparken tekrardan o veriyi okuyup değerini almak istedi.Eee veri eski veri değil. Doğal olarak transaction'ın işlemlerinin sonucu yanlış çıkacaktır.İşte bu sorunu ortadan kaldırmak için bu level kullanılmaktadır.Yani kısaca bir transaction tarafından kullanılan veri diğer transaction tarafından okunamaz.Fakat buradaki asıl amaç bir transaction tarafından okunan ve kullanılan verinin <u style="font-weight: bold;">değiştirilmemesidir.</u>Bu sayede dirty reads,lost updates,non-repeatables reads sorunları ortadan kalkar.Fakat phantom reads sorunu vardır.</div>
<div>
<b><u><br /></u></b></div>
<div>
<div>
Peki bu level ı nasıl kullanacağım ? </div>
<div>
<br /></div>
<div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
<span style="color: blue; font-family: "courier new"; font-size: 10.0pt; line-height: 115%;">SET</span><span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"> <span style="color: blue;">TRANSACTION</span> <span style="color: blue;">ISOLATION</span>
<span style="color: blue;">LEVEL</span> <span style="color: blue;">REPEATABLE</span>
<span style="color: blue;">READ</span></span></div>
<br />
<div class="MsoNormal">
<span style="font-family: "courier new"; font-size: 10pt; line-height: 14px;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Yukarıdaki gibi sql komutu ile oldukça basit bir şekilde aktif hale getirebiliriz.</div>
<div class="MsoNormal">
<br /></div>
<h2>
<b>Serializable</b></h2>
</div>
</div>
<div>
Veri ekleme,silme ve güncelleme yapan transaction boyunca veri erişime kapanır.Bu sayede hiç bir ortak zamanlı sorun ortada kalmaz.Fakat işlemler çok fazla birikir.Bu da bize performans sorunu yaşatır.</div>
<div>
<br /></div>
<div>
Peki bu level ı nasıl kullanacağım ?
</div>
<div>
<br /></div>
<div>
<div class="MsoNormal">
<span style="color: blue; font-family: "courier new"; font-size: 10.0pt; line-height: 115%;">SET</span><span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"> <span style="color: blue;">TRANSACTION</span> <span style="color: blue;">ISOLATION</span>
<span style="color: blue;">LEVEL</span> <span style="color: blue;">SERIALIZABLE</span></span></div>
<div class="MsoNormal">
<span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Yukarıdaki gibi sql komutu ile oldukça basit bir şekilde aktif hale getirebiliriz.</div>
<h2>
<b>Read Commited Snapshot Isolation</b></h2>
</div>
<div>
<b> </b>Bu level da Read Commited level da oluşan <b>Shared Lock </b>durumu ortadan kalkar.Yani bir transaction bir veride güncelleme yaparken bir başka transaction bu veriyi okuyabilir.Bir transaction içerisinde kalmış ve commit edilmemiş verilerin <b>tempdb</b> veritabanına <b>snapshot </b>larını kaydeder.Böylece diğer transactionların verileri okuması sağlanmaktadır.</div>
<div>
Kullanılabilmesi için database seviyesinde <span style="background-color: white; font-family: "verdana"; font-size: 11px;"><i style="font-weight: bold;">READ_COMMITTED_SNAPSHOT </i></span>parametresinin <b>"on"</b> konumunda olması gerekmektedir.Default olarak <b>"off"</b> ayarlanıktır.</div>
<div>
<span style="font-family: "verdana";"><span style="font-size: 11px;"><br /></span></span></div>
<div>
<div class="MsoNormal">
<span style="color: blue; font-family: "courier new"; font-size: 10.0pt; line-height: 115%;">ALTER</span><span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"> <span style="color: blue;">DATABASE</span> Northwind <span style="color: blue;">SET</span>
<span style="color: blue;">READ_COMMITTED_SNAPSHOT</span> <span style="color: blue;">ON</span></span></div>
<div class="MsoNormal">
<span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Olarak kullanılır.</div>
</div>
<h2>
<b>Snapshot Transaction Isolation</b></h2>
<div>
Bir üstteki level dan tek farkı burada yapılan konfigurasyonun transaction bazında olmasıdır.</div>
<div>
Kullanımında öncelikle database seviyesinde ayar yapılması gerekir.</div>
<div>
<br /></div>
<div>
<div class="MsoNormal">
<span style="color: blue; font-family: "courier new"; font-size: 10.0pt; line-height: 115%;">ALTER</span><span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"> <span style="color: blue;">DATABASE</span> Northwind <span style="color: blue;">SET</span>
<span style="color: blue;">ALLOW_SNAPSHOT_ISOLATION</span> <span style="color: blue;">ON</span></span></div>
<div class="MsoNormal">
<span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Daha sonra ise transaction seviyesinde ayarlama yapılması gerekmektedir.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
<span style="color: blue; font-family: "courier new"; font-size: 10.0pt; line-height: 115%;">SET</span><span style="font-family: "courier new"; font-size: 10.0pt; line-height: 115%;"> <span style="color: blue;">TRANSACTION</span> <span style="color: blue;">ISOLATION</span>
<span style="color: blue;">LEVEL</span> <span style="color: blue;">SNAPSHOT</span></span></div>
<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Evet arkadaşlar umarım faydalı olmuştur.Bir sonraki makalemde görüşmek dileğiyle...</div>
</div>
Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com13tag:blogger.com,1999:blog-4071857482116442561.post-57380360897330978592012-05-03T10:49:00.001-07:002012-05-03T10:49:49.200-07:00Sql Server Index YapısıMerhaba arkadaşlar.Bu makalemde sizlere index nedir? Nasıl bir yapısı vardır ? Ne gibi yararlar sağlar ? Nasıl kullanılır ? Neden kullanılır ? gibi detaylı olarak index yapısını anlatacağım.Eğer bu makaleyi okuyorsanız ya küçük veya orta çaplı database ler ile çalıştınız yada verilerinin oldukça birikti sorgularınız geç cevap veriyordur.Açıkça söylemek gerekirse ben index lerin ne olduğunu büyük database lerle çalışmadan bilmiyordum.Ta ki bir gün bir projede database deki birden fazla tablonun içerisindeki kayıtların yüzbinleri hatta milyonları bulabileceği söylenene kadar.İlk yaptığım hemen 3 kolonlu basit olarak adı ve soyadı bilgilerini tutan bir tablo oluşturmak oldu.Daha sonra basit bir while döngüsü ile 1.000.000 kayıt girdisi yaptım.Sonrasında ise sadece select * from adi where adi='koray99999' şeklinde bir sorgu çekmek oldu.Bakın ne join yapısı var ne sub query filan var.Basit bir sorgu.Dedim en fazla 2-3 saniyede getirir sonucu dedim.Fakat hiç de öyle olmadı :).Oldukça fazla beklemiştim.Dedim bu böyle olmaz.Mutlaka bir yolu yöntemi vardır.Araştırmalarım sonucunda index nimetini buldum.Index yapısını oluşturduktan sonraki sorgumun sonucu bana 1-2 saniye gibi müthiş bir hız farkıyla döndü.Bu bizzat benim yaşadığım örnekti.Bir de düşünün arkadaşlar turkcell avea gibi telefon şirketlerinin database lerini ve bu databaselere gelen sorguları ? Yani kısacası eğer veriniz oldukça fazla ise yada en azından bunu öngörebiliyorsanız yüksek performans almak zorundasınız.Bunun için de index yapısı oluşturmalısınız arkadaşlar.Index'in faydasını anlattıktan sonra hadi gelin Index in yapısını inceleyelim.<br />
<br />
Sql server'da 2 farklı index yapısı mevcuttur.Clustered ve Non-Clustered Index.<br />
<br />
<b>1-)Clestered Index:</b>Kümelenmiş index olarak türkçeye çevirilebilinir.Diyelim ki arkadaşlar özel bir dershane açtık.İlk gün 10 tane öğrenci geldi kayıt ettik.Bu öğrencilerin dosyalarını çekmeceye koyduk.2.gün 15 öğrenci kaydoldu ve bu öğrencilerin dosyalarını da çekmeceye koyduk.İlk hafta sonunda toplam 60 öğrencimiz oldu.Çekmecemiz doldu bu sefer de dolablara koymaya başladık.Bu şekilde durumu kurtardığımızı düşündük.Fakat yıllar geçti bu sefer dolaplarda yetmedi hatta arşivlemeye başladık.Yer sıkıntımız oluştu.Hatta bir gün Koray Düzgün adında bir öğrencimizin bilgisine ulaşmak istedik.O kadar veri yığınının içinde ara ki bulasın.Bundan bir ders çıkardık ve alfabetik sıraya göre sıralayıp tüm dosyaları kümeleştirdik.Bir sonraki öğrenci geldiğinde direk hangi kümedeyse hangi sıradaysa gidip bulduk.Ne kadar hızlı sonuca ulaşıp ne kadar iş ve zaman kazancı sağladık.İşte arkadaşlar database imizdeki verilere clustered index yapısı oluşturursak aynı şekilde kazanç sağlarız.Clustered index yapısında elimizdeki veriler sıralı olarak belli bir grup içinde bulunur.Bu şekilde çok daha hızlı bir şekilde sonuca ulaşırız.Aslında eğer veri tabanı oluşturduysanız daha önce farkında olmadan kesinlikle eminim ki clustered index kullandınız.Hepiniz bir tabloda bir kolona mutlaka primary key koymuşsunuzdur.Hatta identity bile verdiniz.Identity verdiğiniz anda o kolondaki veriler sıralı olarak kaydedilmiyor mu ? Alın size işte clustered index.Clustered index 3 yapıdan oluşur.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFe5Ar2RmHXKGMohNw1LVy3YzMQ6ykElt43jc5iCrNx6ODIRGhV9wpcjuTBWP09SZzG4f_8tEc91oTfATgFmhX6Jhy3F8mPljDaDYZMgrNkOFH84fMuLDQFxf_uPppejYLel2u7OcmtEn/s1600/indexes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFe5Ar2RmHXKGMohNw1LVy3YzMQ6ykElt43jc5iCrNx6ODIRGhV9wpcjuTBWP09SZzG4f_8tEc91oTfATgFmhX6Jhy3F8mPljDaDYZMgrNkOFH84fMuLDQFxf_uPppejYLel2u7OcmtEn/s1600/indexes.jpg" /></a></div>
<br />
Clustered index yapıldığında sıralanan veriler leaf de tutulur.Yukarıdaki örnekte öğrencinin dosyasına ulaştığınızda direk verinin kendisine ulaşıyoruz değil mi ? Bunun nedeni de clustered index de veriler leaf aşamasında bulunur.Baş harflerine göre gruplama yaptığımızda ise bu grup bilgileri de intermadiate level larda tutulur.Bilinmesi gereken en önemli noktalardan birisi bir tabloda sadece 1 tane clustered index oluşturulabilinir.<br />
<br />
<b>2-)Non-Clustered Index:</b>Bir kitap aldınız elinize.Oldukça kalın bir kitap.Diyelim ki sql server ile ilgili bir kitap olsun.Ve index konusunun geçtiği sayfaları tek tek bulmak istiyorsunuz.Ne yaparsınız?Bütün kitabı arayıp bulur musunuz? Yok artık . Bazı kitaplarda sonlarında içinde geçen konular ve bu konuların ve ya kelimelerin sayfa numaraları liste halinde yazılıdır.Ne yaparsınız böyle bir durumda?Öncelikle gidip arkadan hangi sayfalarda olduğunu bulursunuz.Daha sonra o sayfalara bakıp veriye ulaşırsınız.İşte en güzel non-clustered yapısı.Bu örnekten de anlaşıldığı gibi non-clustered yapıda verinin kendisine ulaşamazsınız.Bu yapıda leaf level larda verinin bulunduğu adres bulunur.Daha sonra tekrardan root a çıkılıp aşağıya doğru inilerek verinin kendisine ulaşılır.Sql server 2005 de 255 tane bir tabloya non-clustered index oluşturabiliyorduk.Sql server 2008 ile birlikte 999 adet oluşturulabiliniyor.Fakat pek tabi bir tabloya bu kadar non-clustered index verilmez.Ben bolca var nasılsa her kolona koyayım oh ne güzel gibi bir düşünce olmasın.Çünkü bu sefer index yapısı arka planda karışıyor.Dikkat edilmesi gereken şu ki en fazla sorgu çekilen kolonlara verilmek en doğrusudur.<br />
<br />
Clustered yapılarını kavradıktan sonra bakalım tüm bu anlatılanlar ne kadar doğru ? Hemen test yapalım arkadaşlar.<br />
<br />
<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">DECLARE</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> @i <span style="color: blue;">INT<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">SET</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> @i<span style="color: grey;">=</span>0<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">WHILE</span><span style="color: grey; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">(</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">@i<span style="color: grey;"><</span>100000<span style="color: grey;">)<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">BEGIN<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">INSERT</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> <span style="color: blue;">INTO</span> dbo<span style="color: grey;">.</span>Telefonlar<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">SELECT</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> Ad<span style="color: grey;">=</span><span style="color: red;">'Koray'</span><span style="color: grey;">+</span><span style="color: magenta;">CAST</span><span style="color: grey;">(</span>@i <span style="color: blue;">AS</span> <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>30<span style="color: grey;">)),</span>SoyAd<span style="color: grey;">=</span><span style="color: red;">'Düzgün'</span><span style="color: grey;">+</span><span style="color: magenta;">CAST</span><span style="color: grey;">(</span>@i <span style="color: blue;">AS</span> <span style="color: blue;">NVARCHAR</span><span style="color: grey;">(</span>30<span style="color: grey;">)),</span>TelefonNo<span style="color: grey;">=</span><span style="color: red;">'123456789'<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">SET</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> @i<span style="color: grey;">=</span>@i<span style="color: grey;">+</span>1<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;">END</span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"><br /></span></div>
<div class="MsoNormal">
T-Sql kodları ile verilerimizi kaydettik.Daha sonrasında ise ,</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: green; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">--Aşağıdaki
işlemle Kaç logical read yaptıgımı gösteren sistemi açtým<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">SET</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> <span style="color: blue;">STATISTICS</span> <span style="color: blue;">IO</span> <span style="color: blue;">ON<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: green; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">--</span>
<span style="color: green; font-family: 'Courier New'; font-size: 13px;">Aşağıdaki </span> <span style="color: green; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">işlemle Kaç Kaç milisaniye geçtiğini gösteren sistemi açtým<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;">SET</span><span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"> <span style="color: blue;">STATISTICS</span> <span style="color: blue;">TIME</span> <span style="color: blue;">ON</span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Daha sonra ise </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;">SELECT</span><span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"> <span style="color: grey;">*</span> <span style="color: blue;">FROM</span> dbo<span style="color: grey;">.</span>Telefonlar <span style="color: blue;">WHERE</span> Ad<span style="color: grey;">=</span><span style="color: red;">'Koray99993'</span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"><span style="color: red;"><br /></span></span></div>
<div class="MsoNormal">
Olarak select çekin.Ve çıkan verilere göz atın.Daha sonra ise
</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: green; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">--Clustered
indeks tanımladım <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">CREATE</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> <span style="color: blue;">CLUSTERED</span> <span style="color: blue;">INDEX</span>
TelefonIndeks <span style="color: blue;">ON</span> dbo<span style="color: grey;">.</span>Telefonlar<span style="color: grey;">(</span>AdresID<span style="color: grey;">)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;">SELECT</span><span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"> <span style="color: grey;">*</span> <span style="color: blue;">FROM</span> dbo<span style="color: grey;">.</span>Telefonlar <span style="color: blue;">WHERE</span>
AdresID<span style="color: grey;">=</span>80000</span></div>
<br />
<br />
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Olarak select çekin.Ve çıkan verilere göz atın.Daha sonra ise
</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">REATE</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> <span style="color: blue;">NONCLUSTERED</span> <span style="color: blue;">INDEX</span>
AdaGoreIndeksle <span style="color: blue;">ON</span> dbo<span style="color: grey;">.</span>Telefonlar<span style="color: grey;">(</span>Ad<span style="color: grey;">)<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: green; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">--Non-Clustered
indeks tanımladım <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;">SELECT</span><span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"> <span style="color: grey;">*</span> <span style="color: blue;">FROM</span> dbo<span style="color: grey;">.</span>Telefonlar <span style="color: blue;">WHERE</span> Ad<span style="color: grey;">=</span><span style="color: red;">'Koray99993'</span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-no-proof: yes;"><span style="color: red;"><br /></span></span></div>
<div class="MsoNormal">
Olarak select çekin.Ve çıkan verilere göz atın.Sonuçlardan farkı göreceksiniz.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Umarım faydalı olmuştur arkadaşlar.Bir sonraki makalemde görüşmek dileğiyle...</div>
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com3tag:blogger.com,1999:blog-4071857482116442561.post-15340870096532969402012-04-30T13:11:00.000-07:002012-05-08T14:30:08.199-07:00T-Sql TransactionMerhaba arkadaşlar.Bu makalemde sizlere oldukça önemli ve kullanılan bir yöntemi anlatacağım.Transaction.Nedir bu transaction? Bir bütün olarak çalışması gereken bir takım sql komutlarınız olduğunu düşünün.Dolayısıyla bu komutlardan birisinin çalışması sırasında oluşacak bir hata sonucunda diğer sql komutlarının sonuçları da etkilenecektir.Bu konuya en güzel örnek banka havale işlemidir aslında.Düşünün ki siz bana 1000Tl havale yaptınız.Fakat banka sizden parayı çektikten sonra bir hata oluştu ve bana çektiği parayı yatırmadı.Eee ne olacak?Para nerede ? Para uçtu değil mi ? Sizden 1000tl gitti.Bana para gelmedi.Düşünün bu şekilde 100 kere hata oluştuğunu hatta çok daha fazla miktar havale sırasında hata oluştu.Banka batar :) İşte bu şekilde son derece önemli ve bir bütün halinde başarılı çalıştıktan sonra sonuçların yansıması gereken işlemlerde Transaction kullanılır.<br />
<div>
<br /></div>
<div>
Şimdi id,adi ve bakiyesi kolonlarından oluşan basit bir hesap tablomuz olsun.Bu tablo üzerinden havale işlemini yapan sql komutlarını yazalım .</div>
<div>
<br /></div>
<div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">update</span><span style="font-family: 'Courier New'; font-size: 10pt;"> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">-=</span>1000 <span style="color: blue;">where</span> id <span style="color: grey;">=</span>2<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">update</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">+=</span>1000 <span style="color: blue;">where</span> id <span style="color: grey;">=</span>3</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"><br /></span></div>
<div class="MsoNormal">
Yukarıdaki sql komutları birlikte çalışması yani bütün halinde çalışması gerekmektedir.Diyelim ki bir hata oluştu.Çok basit bir hata fırlatalım hemen .</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">update</span><span style="font-family: 'Courier New'; font-size: 10pt;"> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">-=</span>1000 <span style="color: blue;">where</span> id <span style="color: grey;">=</span>2</span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">update</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">+=</span>(</span><span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">select</span><span style="font-family: 'Courier New'; font-size: 10pt;"> 10<span style="color: grey;">/</span>0</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">) </span><span style="color: blue; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">where</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> id </span><span style="color: grey; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">=</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">3</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"><br /></span></div>
<div class="MsoNormal">
Yukarıdaki division by zero hatası fırlattım basit olarak.Diyelim ki bir hata oluştu id si 2 olan hesaptaki müşteriden 1000 tl düşüyor.Fakat 3 'e aktarılmıyor.Bunu engellemek için akla gelen try catch dir.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">begin</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">try<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">update</span><span style="font-family: 'Courier New'; font-size: 10pt;"> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">-=</span></span>
<span style="font-family: 'Courier New'; font-size: 13px;">1000 </span>w<span style="font-family: 'Courier New'; font-size: 10pt;"><span style="color: blue;">here</span> id <span style="color: grey;">=</span>2</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">update</span><span style="font-family: 'Courier New'; font-size: 10pt;"> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">+=</span></span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 14px;">(</span><span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">select</span><span style="font-family: 'Courier New'; font-size: 10pt;"> 10<span style="color: grey;">/</span>0</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 14px;">)</span> <span style="font-family: 'Courier New'; font-size: 10pt;"><span style="color: blue;">where</span> id <span style="color: grey;">=</span>3<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">end</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">try<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">begin</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">catch<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">print</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: red;">'hata oluştu'<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">end</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> <span style="color: blue;">catch</span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Fakat bu şekilde kullanırsak da ilk işlemi yapacak diğerinde hata oluşacağı için yapmayacaktır.Try catch de işimize yaramadı arkadaşlar. Tek bir çaremiz var transaction kullanmak.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">begin</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">try<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">begin</span> <span style="color: blue;">transaction<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">update</span> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">-=</span>1 <span style="color: blue;">where</span> id <span style="color: grey;">=</span>2</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">update</span> Hesap <span style="color: blue;">set</span> Bakiyesi<span style="color: grey;">+=</span></span>
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 14px;">(</span><span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">select</span><span style="font-family: 'Courier New'; font-size: 10pt;"> 10<span style="color: grey;">/</span>0</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 14px;">)</span> <span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">where</span> id <span style="color: grey;">=</span>3<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">commit</span> <span style="color: blue;">tran</span><span style="color: green;">--transaction da yazılabilir.Commiti gordugunde o ana
kadarki işlemleri onaylar ve gerçek verilere yansıtır. <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">end</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">try<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">begin</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">catch<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">print</span> <span style="color: red;">'</span></span>
<span style="color: red; font-family: 'Courier New'; font-size: 13px;">hata oluştu</span> <span style="font-family: 'Courier New'; font-size: 10pt;"><span style="color: red;">'<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">rollback</span> <span style="color: blue;">tran</span> <span style="color: green;">--transaction da
yazılabilir.<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">end</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> <span style="color: blue;">catch</span></span></div>
<br />
<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Evet arkadaşlar yukarıdaki bir transaction yapısı oluşturursak eğer işlemlerimizin tamamı başarılı bir şekilde gerçekleşirse sonuçları kayıtlarımıza yansıyacaktır.Aksi taktirde hiç bir işlem olmayacaktır.Buradan anlaşılan şudur: Transanction da ya hep ya hiç mantığı vardır.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Umarım faydalı olmuştur arkadaşlar.Bir sonraki makalemde görüşmek dileğiyle...</div>
<div class="MsoNormal">
<br /></div>
</div>Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0tag:blogger.com,1999:blog-4071857482116442561.post-58286075712372921322012-04-30T12:19:00.000-07:002012-05-07T06:56:57.202-07:00T-Sql Trigger 2 - DDL TriggerMerhaba arkadaşlar.Trigger konumuzun 2.partında Ddl Trigger ları anlatacağım.Önceki partta Dml trigger ları anlatmıştım.Ddl Trigger lar tanımlandığı sql server üzerinde çalıştırılan Ddl sorguları ile tetiklenen triggerlardır.Database oluşumundan tutun da view düzenlemesine kadar dml sorguların etki ettiği tüm database nesneleri üzerinden tetiklenebilirler.Farklı senaryolar ile ddl triggerların oluşturulmasını inceleyeceğiz arkadaşlar.<br />
<br />
Not:Syntax i dml trigger lar ile aynıdır.Bu yüzden tekrardan incelemeye almayacağım.Dml trigger ları anlattığım makaleden syntax i hakkında bilgi edinebilirsiniz.<br />
<br />
İlk senaryomuz server üzerinde herhangi bir tabloyu herhangi bir şekilde değiştirme işlemini engelleyen bir trigger oluşturmak olsun arkadaşlar.<br />
<br />
<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">create</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">trigger</span> TabloDuzenlemeEngeli<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">on</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">database<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">for</span><span style="font-family: 'Courier New'; font-size: 10pt;">
Alter_Table<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">as<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">raiserror</span><span style="color: grey;">(</span><span style="color: red;">'Tablo düzenleme engeli'</span><span style="color: grey;">,</span>16<span style="color: grey;">,</span>1<span style="color: grey;">)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> <span style="color: blue;">rollback</span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Yuarıdaki gibi bir trigger oluşturduğumuzda triggerımızın bulunduğu server üzerindeki tabloların yapısında değişiklik yapılmasını engellemiş oluruz arkadaşlar.Bu trigger da kullandığım 2 tane sql komutu vardır.Raiserror ile hata fırlatma işlemi yapabiliriz.İstediği parametreler sırası ile hata mesajı,severity değeri ve state değeridir.Rollback ise trigger tetiklenmeden önce yapılan işlemleri geri almak için kullanılır.Transaction konusunda detaylı olarak anlatacağım.Şuan üzerinde durmuyorum.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Diğer bir senaryomuz ise database oluşturma engeli vermek olsun.Bunun için de ,</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">create</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">trigger</span> VeriTabaniOlusturmaEngeli<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">on</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: grey;">all</span> <span style="color: blue;">server<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">for</span><span style="font-family: 'Courier New'; font-size: 10pt;">
CREATE_DATABASE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">as<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">raiserror </span><span style="color: grey;">(</span><span style="color: red;">'Adam ol la'</span><span style="color: grey;">,</span>16<span style="color: grey;">,</span>1<span style="color: grey;">)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> <span style="color: blue;">rollback</span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Diğer bir senaryomuz ise database silme engeli vermek olsun.Bunun için de ,
</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">create</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">trigger</span> VeriTabaniSilmeEngeli<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">on</span><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: grey;">all</span> <span style="color: blue;">server<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">for</span><span style="font-family: 'Courier New'; font-size: 10pt;"> Drop_DATABASE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: blue; font-family: 'Courier New'; font-size: 10pt;">as<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: blue;">raiserror </span><span style="color: grey;">(</span><span style="color: red;">'Adam ol la'</span><span style="color: grey;">,</span>16<span style="color: grey;">,</span>1<span style="color: grey;">)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 14px;"> <span style="color: blue;">rollback</span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: 10pt; line-height: 14px;"><span style="color: blue;"><br /></span></span></div>
<div class="MsoNormal">
Gibi bir çok senaryo kurabiliriz arkadaşlar.Temel olarak anlaşılması gereken önemli nokta tüm database nesneleri üzerinde ddl sorguları çalıştırıldığında yani drop,create ve alter işlemi yapıldığında ddl triggerların tetiklenip içerisinde belirttiğimiz kodları işlemesidir.Diğer tüm özellikleri dml triggerlar ile aynıdır.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Umarım faydalı olmuştur arkadaşlar.Bir sonraki makalemde görüşmek dileğiyle ...</div>
<br />
<br />Anonymoushttp://www.blogger.com/profile/07069515912801278121noreply@blogger.com0