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

<channel>
	<title>C# kitabı</title>
	<atom:link href="http://www.ahmetkaymaz.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ahmetkaymaz.com</link>
	<description>SQL Server, C#, VB.NET, ASP.NET, AJAX ile ilgili örnek kitap ve ipuçları</description>
	<pubDate>Fri, 19 Feb 2010 07:19:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>VB.NET Kitabı Yayınlandı</title>
		<link>http://www.ahmetkaymaz.com/2009/09/09/vbnet-kitabi-yayinlandi/</link>
		<comments>http://www.ahmetkaymaz.com/2009/09/09/vbnet-kitabi-yayinlandi/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 07:51:35 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[Kitaplarım]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=272</guid>
		<description><![CDATA[

VB.NET Programlama Dili


Cilt 1. Programlama İlkeleri



Bölüm 1.    .NET Framework Temel Kavramları
Bölüm 2.    VB.NET Programlama Diline Giriş
Bölüm 3.    Veri Türleri ve Değişkenler
Bölüm 4.    Operatörler
Bölüm 5.   Kontrol Deyimleri
Bölüm 6.    Diziler
Bölüm 7.    Nesne Yönelimli Programlama
Bölüm 8.   [...]]]></description>
			<content:encoded><![CDATA[<table class="gritable" width="100%" align="center">
<tr>
<th>VB.NET Programlama Dili</th>
</tr>
<tr>
<th>Cilt 1. Programlama İlkeleri</th>
</tr>
<tr>
<td>
Bölüm 1.    .NET Framework Temel Kavramları<br />
Bölüm 2.    VB.NET Programlama Diline Giriş<br />
Bölüm 3.    Veri Türleri ve Değişkenler<br />
Bölüm 4.    Operatörler<br />
Bölüm 5.   Kontrol Deyimleri<br />
Bölüm 6.    Diziler<br />
Bölüm 7.    Nesne Yönelimli Programlama<br />
Bölüm 8.    Statik Üyeler &#038; Harici Sınıflar<br />
Bölüm 9.    OOP&#8217;nin Temel İlkeleri<br />
Bölüm 10.        Yapı, Numaralandırma ve Öznitelik<br />
Bölüm 11.        Aykırı Durum Yönetimi<br />
Bölüm 12.        NET&#8217;te Koleksiyon Nesneleri<br />
Bölüm 13.        Delegeler ve Olaylar<br />
Bölüm 14.        .NET&#8217;te Giriş/Çıkış Kullanımı<br />
Bölüm 15.        Sözce/String Türü ve Karakter Biçimlendirme İşlemleri<br />
Bölüm 16.        Operatörlerin Yeniden Yüklenmesi<br />
Bölüm 17.        Yansıma (Reflection)<br />
Bölüm 18.        Emniyetsiz Kod ve İşaretçiler<br />
Bölüm 19.  Çok Parçacıklı (Multithreading) Programlama<br />
Bölüm 20.   Bütünleştirilmiş Kod (Assembly) Türleri ve Kullanımı<br />
Bölüm 21. Windows Form Uygulamaları (GUI)<br />
Ek A:  UML Diyagramları</p>
<p><a href="http://www.hepsiburada.com/productDetails.aspx?CategoryId=211651&#038;productId=kfnpapatya7853" target="_blank">hepsiburada.com</a><br />
<a href="http://www.kitapyurdu.com/kitap/default.asp?id=460193" target="_blank">kitapyurdu.com</a><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.idefix.com/kitap/vb-net-programlama-dili-ahmet-kaymaz/tanim.asp?sid=DA5L5LC6ZB0PK8IB1PEM" target="_blank">ideefixe.com</a>
</td>
</tr>
<tr>
<th>Cilt 2.  İleri Düzey Programlama</th>
</tr>
<tr>
<td>
Bölüm 22.      ADO.NET Mimarisi<br />
Bölüm 23.      ADO.NET Bağlantılı Sınıflar<br />
Bölüm 24.      ADO.NET Bağlantısız Sınıflar<br />
Bölüm 25.      DataSet Nesne Türleri<br />
Bölüm 26.      DataAdapter Kullanımı<br />
Bölüm 27.     İleri ADO.NET Konuları<br />
Bölüm 28.      XML Nedir?<br />
Bölüm 29.      .NET Framework&#8217;te XML Programlama<br />
Bölüm 30.     VB.NET 9.0 Yenilikleri<br />
Bölüm 31.      LINQ Sorgulama Yöntemi<br />
Bölüm 32.     SQL ve XML için LINQ Kullanımı<br />
Ek A:   .NET Framework Mimarisi ve Bileşenleri
</td>
</tr>
<tr>
<th><a href="http://www.ahmetkaymaz.com/go.php?VBNet_Programlama_Dili_Yazilim_Tasarimi_Kitap.html" target="_blank">Kitapların detaylı İÇİNDEKİLER bölümü için tıklayınız.</a></th>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2009/09/09/vbnet-kitabi-yayinlandi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>C# Kitabının &#8220;İleri Düzey Programlama&#8221; Cildi Yayınlandı</title>
		<link>http://www.ahmetkaymaz.com/2009/02/10/c-kitabinin-ileri-duzey-programlama-cildi-yayinlandi/</link>
		<comments>http://www.ahmetkaymaz.com/2009/02/10/c-kitabinin-ileri-duzey-programlama-cildi-yayinlandi/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 08:08:24 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[Kitaplarım]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=262</guid>
		<description><![CDATA[

C# Programlama Dili ve Yazılım Tasarımı


Cilt 1. Programlama İlkeleri



Bölüm 1.    .NET Framework Temel Kavramları
Bölüm 2.    C# Programlama Diline Giriş
Bölüm 3.    Veri Türleri ve Değişkenler
Bölüm 4.    Operatörler
Bölüm 5.   Kontrol Deyimleri
Bölüm 6.    Diziler
Bölüm 7.    Nesne Yönelimli Programlama
Bölüm [...]]]></description>
			<content:encoded><![CDATA[<table class="gritable" width="100%" align="center">
<tr>
<th>C# Programlama Dili ve Yazılım Tasarımı</th>
</tr>
<tr>
<th>Cilt 1. Programlama İlkeleri</th>
</tr>
<tr>
<td>
Bölüm 1.    .NET Framework Temel Kavramları<br />
Bölüm 2.    C# Programlama Diline Giriş<br />
Bölüm 3.    Veri Türleri ve Değişkenler<br />
Bölüm 4.    Operatörler<br />
Bölüm 5.   Kontrol Deyimleri<br />
Bölüm 6.    Diziler<br />
Bölüm 7.    Nesne Yönelimli Programlama<br />
Bölüm 8.    Statik Üyeler &#038; Harici Sınıflar<br />
Bölüm 9.    OOP&#8217;nin Temel İlkeleri<br />
Bölüm 10.        Yapı, Numaralandırma ve Öznitelik<br />
Bölüm 11.        Aykırı Durum Yönetimi<br />
Bölüm 12.        NET&#8217;te Koleksiyon Nesneleri<br />
Bölüm 13.        Delegeler ve Olaylar<br />
Bölüm 14.        .NET&#8217;te Giriş/Çıkış Kullanımı<br />
Bölüm 15.        Sözce/String Türü ve Karakter Biçimlendirme İşlemleri<br />
Bölüm 16.        Operatörlerin Yeniden Yüklenmesi<br />
Bölüm 17.        Yansıma (Reflection)<br />
Bölüm 18.        Emniyetsiz Kod ve İşaretçiler<br />
Bölüm 19.  Çok Parçacıklı (Multithreading) Programlama<br />
Bölüm 20.   Bütünleştirilmiş Kod (Assembly) Türleri ve Kullanımı<br />
Bölüm 21. Windows Form Uygulamaları (GUI)<br />
Ek A:  UML Diyagramları</p>
<p><a href="http://www.hepsiburada.com/c-programlama-dili-ve-yazilim-tasarimi-cilt-1/productDetails.aspx?categoryid=211651&#038;productid=kfnpapatya010" target="_blank">hepsiburada.com</a><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.kitapyurdu.com/kitap/default.asp?id=441573" target="_blank">kitapyurdu.com</a><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.ideefixe.com/kitap/tanim.asp?sid=EFYSZHYZHP6PO61R0NN7" target="_blank">ideefixe.com</a>
</td>
</tr>
<tr>
<th>Cilt 2.  İleri Düzey Programlama</th>
</tr>
<tr>
<td>
Bölüm 22.      ADO.NET Mimarisi<br />
Bölüm 23.      ADO.NET Bağlantılı Sınıflar<br />
Bölüm 24.      ADO.NET Bağlantısız Sınıflar<br />
Bölüm 25.      DataSet Nesne Türleri<br />
Bölüm 26.      DataAdapter Kullanımı<br />
Bölüm 27.     İleri ADO.NET Konuları<br />
Bölüm 28.      XML Nedir?<br />
Bölüm 29.      .NET Framework&#8217;te XML Programlama<br />
Bölüm 30.     C# 3.0 Yenilikleri<br />
Bölüm 31.      LINQ Sorgulama Yöntemi<br />
Bölüm 32.     SQL ve XML için LINQ Kullanımı<br />
Ek A:   .NET Framework Mimarisi ve Bileşenleri</p>
<p><a href="http://www.ahmetkaymaz.com/go.php?http://www.kitapyurdu.com/kitap/default.asp?id=447508" target="_blank">kitapyurdu.com</a><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.ideefixe.com/kitap/tanim.asp?sid=U7C8L52P1P2PXJMUMMEY" target="_blank">ideefixe.com</a><br />
<a href="http://www.hepsiburada.com/c-programlama-dili-ve-yazilim-tasarimi-cilt-2/productDetails.aspx?categoryid=211651&#038;productid=kfnpapatya97976" target="_blank">hepsiburada.com</a>
</td>
</tr>
<tr>
<th><a href="http://www.ahmetkaymaz.com/go.php?CSharp_Programlama_Dili_Yazilim_Tasarimi_Kitap.html" target="_blank">Kitapların detaylı İÇİNDEKİLER bölümü için tıklayınız.</a></th>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2009/02/10/c-kitabinin-ileri-duzey-programlama-cildi-yayinlandi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CETURK &#8220;Microsoft Teknolojileri Etkinliği&#8221;</title>
		<link>http://www.ahmetkaymaz.com/2009/02/09/ceturk-microsoft-teknolojileri-etkinligi/</link>
		<comments>http://www.ahmetkaymaz.com/2009/02/09/ceturk-microsoft-teknolojileri-etkinligi/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 15:38:01 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[C#, VB.NET, ASP.NET]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=258</guid>
		<description><![CDATA[CETURK, 7 Şubat Cumartesi günü Microsoft Türkiye İstanbul Ofisi&#8216;nde benim de Ado.Net 3.5 / Ado.Net Entity Framework konusuyla konuşmacı olarak katıldığım Microsoft Teknolojileri Etkinliği&#8216;ni düzenledi. Benim açımdan iş ve sosyal hayat olarak yoğun bir haftaya denk gelmesi, hediye olarak verdiğimiz kitapları yetiştirmek için ciddi bir zaman harcamış olmam ve bunun sonucunda kendi sunum saatine yetişemememden [...]]]></description>
			<content:encoded><![CDATA[<p>CETURK, <b>7 Şubat Cumartesi</b> günü </b>Microsoft Türkiye İstanbul Ofisi</b>&#8216;nde benim de <b>Ado.Net 3.5 / Ado.Net Entity Framework</b> konusuyla konuşmacı olarak katıldığım <b>Microsoft Teknolojileri Etkinliği</b>&#8216;ni düzenledi. Benim açımdan iş ve sosyal hayat olarak yoğun bir haftaya denk gelmesi, hediye olarak verdiğimiz kitapları yetiştirmek için ciddi bir zaman harcamış olmam ve bunun sonucunda kendi sunum saatine yetişemememden dolayı etkin bir performans sergileyememiş olsam da benim için faydalı oldu. Konu katılımcı profiliyle ne kadar uyuştu veya onların ne kadar ilgisini çekti bilemiyorum ancak birkaç arkadaşın bu konularda ürün çıkaracak kadar çalışıyor olmaları beni daha da cesaretlendirdi. Tüm katılımcılara ve etkinliği düzenleyen CETURK ekibine de teşekkür ederim. Oturumumla ilgili sunumu aşağıda bulabilirsiniz.</p>
<div style="width:425px;text-align:left" id="__ss_1028230">
<object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=ahmetkaymazceturketkinlik7subatyazilimsurecleri-1234639149714544-3&#038;stripped_title=ahmet-kaymaz-ceturk-etkinlik-7-subat-yazilim-surecleri" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=ahmetkaymazceturketkinlik7subatyazilimsurecleri-1234639149714544-3&#038;stripped_title=ahmet-kaymaz-ceturk-etkinlik-7-subat-yazilim-surecleri" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p><i>Etkinlikle ilgili detayları <a href="http://www.ahmetkaymaz.com/go.php?http://www.ceturk.com/etkinlikkayit.asp?id=63" target="_blank">http://www.ceturk.com/etkinlikkayit.asp?id=63</a> adresinde bulabilirsiniz.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2009/02/09/ceturk-microsoft-teknolojileri-etkinligi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;C# Programlama Dili ve Yazılım Tasarımı&#8221; Kitabı</title>
		<link>http://www.ahmetkaymaz.com/2009/01/16/c-programlama-dili-ve-yazilim-tasarimi-kitabi/</link>
		<comments>http://www.ahmetkaymaz.com/2009/01/16/c-programlama-dili-ve-yazilim-tasarimi-kitabi/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 14:56:14 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[Kitaplarım]]></category>

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

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=247</guid>
		<description><![CDATA[Bu kitap, yeni nesil yazılım geliştirme platformu olan .NET teknolojisinin mimarisini ve tam anlamıyla nesne yönelimli bir dil olan &#8220;C# programlama&#8221; dilini öğretmeyi amaçlamaktadır. Bununla beraber yazılım geliştirme süreçinde karşılaşılan güçlüklerin nasıl aşılacağını ve sağlam bir yazılım tasarımının nasıl oluşturulacağını ele almaktadır.
Kitap, nitelikli konu seçimiyle, sade ve düzgün Türkçe kullanımıyla, her bölümün sonunda verdiği özet [...]]]></description>
			<content:encoded><![CDATA[<p>Bu kitap, yeni nesil yazılım geliştirme platformu olan .NET teknolojisinin mimarisini ve tam anlamıyla nesne yönelimli bir dil olan &#8220;C# programlama&#8221; dilini öğretmeyi amaçlamaktadır. Bununla beraber yazılım geliştirme süreçinde karşılaşılan güçlüklerin nasıl aşılacağını ve sağlam bir yazılım tasarımının nasıl oluşturulacağını ele almaktadır.</p>
<p>Kitap, nitelikli konu seçimiyle, sade ve düzgün Türkçe kullanımıyla, her bölümün sonunda verdiği özet ve sorularla, gerçek projelerden alınmış örneklerle, yeni gelişmeleri de içeriyor olmasıyla gerek yeni öğrenen gerekse deneyimli uygulama geliştiriciler için vazgeçilmez bir başvuru kaynağı niteliğindedir.</p>
<p>Ayrıca konuları yüzeysel değil bir mühendis yaklaşımıyla ayrıntılı ele alması bakımından üniversitelerin Bilgisayar Mühendisliği, Matematik-Bilgisayar, Yönetim Bilişim Sistemleri, Endüstri Mühendisliği, Yazılım Mühendisliği gibi mühendislik ve sosyal bilimlerde dört yıllık lisans ve meslek yüksek okulu öğrencileri için de yararlı bir ders kitabı olma özelliğindedir.</p>
<p><b><font size="1" color="#800000">Cilt 1. Programlama İlkeleri</font></b><br />
<b><font size="1" color="#800000">Cilt 2. İleri Düzey Programlama</font></b></p>
<p><b><font size="2" color="#800000">Kitabı satın almak için aşağıdaki linkleri kullanabilirsiniz.</font></b><br />
<a href="http://www.hepsiburada.com/c-programlama-dili-ve-yazilim-tasarimi-cilt-1/productDetails.aspx?categoryid=211651&#038;productid=kfnpapatya010" target="_blank">hepsiburada.com</a><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.kitapyurdu.com/kitap/default.asp?id=441573" target="_blank">kitapyurdu.com</a><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.ideefixe.com/kitap/tanim.asp?sid=EFYSZHYZHP6PO61R0NN7" target="_blank">ideefixe.com</a></p>
<p><a href="http://www.ahmetkaymaz.com/go.php?CSharp_Programlama_Dili_Yazilim_Tasarimi_Kitap.html">İÇİNDEKİLER Bölümü İçin Tıklayınız.</a></p>
<p><span id="more-247"></span></p>
<p><b><u>Önsöz</u></b></p>
<p>.NET  Framework hakkındaki en son güncel bilgileri içeren bu kitabın Microsoft yazılım platformunu öğrenmek isteyen yazılımcılara ve sektöre girmek üzere hazırlanan öğrenci arkadaşlarımıza yol gösterici olacağını düşünüyorum.</p>
<p>Türkçe teknik içerik yazılım sektöründe önemli bir eksiklik olarak durmaktadır. Bu çalışmanın  da böylesi önemli bir açığı da kapatacağına inanıyoruz. Kitabın içeriğinin sadece teorik bilgi ile sınırlı kalmaması ve yazarın profesyonel hayattaki deneyimlerini de okuyucu ile paylaşıyor olması zengin içeriğine daha da fazla değer katmaktadır.</p>
<p>Bu kitapla Ahmet KAYMAZ&#8217;ın sektörümüze önemli bir katkı sağladığını düşünüyor ve kendisini böylesi ayrıntılı ve titiz çalışması dolayısı ile kutluyorum. </p>
<p>Mehmet EMRE<br />
Microsoft Türkiye</p>
<p><img src="http://www.ahmetkaymaz.com/wp-content/uploads/CSharp_Programlama_Dili_Yazilim_Tasarimi_Cilt1_2.jpg" align="left"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2009/01/16/c-programlama-dili-ve-yazilim-tasarimi-kitabi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>C#, VB.NET, ASP.NET Kitap Serisi</title>
		<link>http://www.ahmetkaymaz.com/2009/01/15/c-vbnet-aspnet-kitap-tavsiye/</link>
		<comments>http://www.ahmetkaymaz.com/2009/01/15/c-vbnet-aspnet-kitap-tavsiye/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 14:32:39 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[Kitaplarım]]></category>

		<category><![CDATA[ASP.NET kitabı]]></category>

		<category><![CDATA[C# kitabı]]></category>

		<category><![CDATA[VB.NET kitabı]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=245</guid>
		<description><![CDATA[Bir taraftan Türkçe bilgisayar kitaplarının pek tutulmaması var olan kitapların dilinin olgunlaşmaması,
bir taraftan bilginin kıymetini kaybetmesini bir taraftan da önemli bir çalışma yapılırsa takdir edileceği ve bu meslekteki insanlara faydalı olacağını düşünerek,
bazen coşup umutlanarak,
bazen heyecanını kaybedip umutsuz düşerek,
bazen idealist davranıp bazen hızlanarak,
bazen yorularak,
bazen sorgulayıp yeni şeyler öğrenerek,
bazen yanlış bildiğini düzelterek
ama en önemlisi kalemin ve yazının [...]]]></description>
			<content:encoded><![CDATA[<p>Bir taraftan Türkçe bilgisayar kitaplarının pek tutulmaması var olan kitapların dilinin olgunlaşmaması,<br />
bir taraftan bilginin kıymetini kaybetmesini bir taraftan da önemli bir çalışma yapılırsa takdir edileceği ve bu meslekteki insanlara faydalı olacağını düşünerek,<br />
bazen coşup umutlanarak,<br />
bazen heyecanını kaybedip umutsuz düşerek,<br />
bazen idealist davranıp bazen hızlanarak,<br />
bazen yorularak,<br />
bazen sorgulayıp yeni şeyler öğrenerek,<br />
bazen yanlış bildiğini düzelterek<br />
ama en önemlisi kalemin ve yazının hakkını vererek gerçekten en iyi olması için çalışarak 3-4 yıldır yazılım tasarımı konusunda bir kitap serisi üzerinde çalışıyorum. </p>
<p>Bu seri, Microsoft teknolojilerini kullanan bir yazılım mühendisi için hem başlangıç hem de ileri düzey sürecinde referans teşkil etmeliydi. Özellikle Bilgisayar Mühendisliği, Bilgisayar Programcılığı ve ilgili diğer bölümler için akademik bir kaynak olmalıydı. Bu amaçla serinin Windows, Web ve veri tabanı konulu kitaplardan oluşmasını hayal ediyordum. Projeyi kafamda ve kağıtta olgunlaştırıp yazmaya başladım. </p>
<p>Öncelikle haftasonu verdiğim eğitim notlarımı, okuldayken hocalardan öğrendiğim notları, profesyonel iş hayatında karşılaştığım sorun ve ipuçları gün yüzüne çıkardım. Ardından kitapların muhtemel içeriğini belirledim. İlk başta aynı kitapta hem C# dilinin hem de VB.NET dilinin olduğu &#8220;İki dil birden&#8221; formatında yazmaya başladım ancak bunun pek kullanışlı olmayacağını düşünerek  ikisini birbirinden bağımsız yazmaya karar verdim. 2005&#8242;in başlarında ilk cümleyi yazmaya başladım. Her bir satırı yazdıkça yazarlara olan saygım daha da artıyordu. Bilmenin yapabilmek olmadığını, anlatabilmek olmadığını özellikle yazmanın bilmenin çok ötesinde birşey olduğunu anladım. Araya sosyal ve iş hayatının yoğunluğunun girmesiyle proje uzadıkça uzadı. Çok kısa sürede bilgisayar kitaplarının yazıldığı, popüler bir tüketim alışkanlığının kazandırıldığı ve Microsoft ile teknoloji gelişimi anlamında yarışmanın mümkün olmadığı bir dönemde bu kadar gecikmek birkaç kez projeden soğumama neden oldu. Etrafımdaki değerli dostlarım aracılığıyla ancak tüm seriyi 2008&#8242;in yazında bitirebildim.  İlk başta C#, VB.NET, ASP.NET ve SQL Server kitaplarından oluşması düşünülen bu seri SQL Server olmadan tamamlandı. Kitapların iyi birer kaynak olması gerekiyordu bunun için de zaman yetmiyordu. Bu yüzden SQL Server&#8217;e hiç başlamamaya karar verdik. SQL Server, sırf kitap olsun diye yazılacak bir platform olmadığı için yazılacaksa gerçekten hakkı verilerek yazılmalı. Bunun da önemli bir zaman alacağı kanısındayım. Önümüzdeki yıllarda SQL Server&#8217;in özellikle DBA&#8217;ler için bir yönetim kitabı çıkarmayı düşünüyorum.</p>
<p>İyi ve faydalı kitaplar olması için iyi bir yayın danışmanı ve iyi bir yayıneviyle çalışmak gerekiyordu. Bunun için bu sektörde birçok kişiye hocalık yapmış olan ve &#8220;İşte C&#8221; kitabıyla birçok kişinin C dilini öğrendiği <b>Dr. Rifat Çölkesen</b> beyefendiyle çalıştık ve yayınevi olarak ta akademik - bilimsel - üniversite ders kitapları basan <a href="http://www.ahmetkaymaz.com/go.php?http://www.papatya.gen.tr" target="_blank">Papatya Yayınclık Eğitim A.Ş.</a> tercih edildi. Kitaptaki teknik anlatımın doğruluğu için başta TurkoCRM&#8217;in yaratıcılarından Murat Öngüdü olmak üzere birçok Bilgisayar Mühendisi ile çalışıldı. Bu kişilerin özellikle piyasada çalışıyor olmalarına dikkat edildi. Çünkü kitapların teoriyle birlikte bilgilerin gerçek hayatta hangi projelerde nasıl kullanılacağını örneklendirilmesi amaçlandı. Teknik öneriler için Prof. Dr. Esat HAMZAOĞLU ve kitaplarda yalın bir Türkçe&#8217;nin kullanılması için Necdet AVCI ve Batuhan AVCI önemli katkılarda bulundu. Sayfa düzeni ve kapak tasarımı için Olcay Kara&#8217;yı da unutmamak lazım. Bu kitapların bu kişilerin katkısıyla daha da iyi olduğu kanısındayım. Hepsine şükranlarımı sunuyorum. Bundan sonrası okuyucunun takdirine bırakılmıştır.</p>
<p>Yazılım mühendisi/uzmanı olmak isteyenler veya daha da uzmanlaşmak için düşündüğümüz serinin kitapları şunlardır;</p>
<p><a href="http://www.ahmetkaymaz.com/2009/01/16/c-programlama-dili-ve-yazilim-tasarimi-kitabi/">C# Programlama Dili ve Yazılım Tasarımı (2 Cilt)</a><br />
VB.NET Programlama Dili ve Yazılım Tasarımı (2 Cilt) - <i>Baskıda</i><br />
ASP.NET ile Web Uygulamaları Geliştirme (C# ve VB.NET uyarlamalı) - <i>Baskıda</i></p>
<p>Serinin ilk kitabı olarak C# dilini seçtik. Kitabın 2 cilt olarak çıkarılmasının hem okunabilirliği hem de konu bütünlüğü açısından daha iyi bir çözüm olacağına karar verildi. Çalışmalarının bitmesiyle birlikte C# kitabının ilk cildi 2008-Kasım ayında piyasaya sürüldü. &#8220;Geç olsun, kötü olmasın&#8221; diyerek bu kitabı da namluya sürdük.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2009/01/15/c-vbnet-aspnet-kitap-tavsiye/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oracle -&gt; SQL Server (Data Import) Code Page Uyarısı</title>
		<link>http://www.ahmetkaymaz.com/2008/12/31/oracle-sql-server-data-import-code-page-uyarisi/</link>
		<comments>http://www.ahmetkaymaz.com/2008/12/31/oracle-sql-server-data-import-code-page-uyarisi/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 08:42:23 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[SQL Server, Oracle]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=278</guid>
		<description><![CDATA[SQL Server içerisindeki Data Import / Export bölümünü veya SSIS aracını kullanarak Oracle&#8217;dan SQL Server&#8217;e veri aktarma aşamasında kolonlara görmek istediğimizde aşağıdaki uyarıyla karşılaşabiliriz. 
Could not connect source component.
Warning 0&#215;80202066: Source - VB_PERMISSIONS [1]: Cannot retrieve the column code page info from the OLE DB provider.  If the component supports the &#8220;DefaultCodePage&#8221; property, the [...]]]></description>
			<content:encoded><![CDATA[<p>SQL Server içerisindeki Data Import / Export bölümünü veya SSIS aracını kullanarak Oracle&#8217;dan SQL Server&#8217;e veri aktarma aşamasında kolonlara görmek istediğimizde aşağıdaki uyarıyla karşılaşabiliriz. </p>
<p><font color="red"><i>Could not connect source component.<br />
Warning 0&#215;80202066: Source - VB_PERMISSIONS [1]: Cannot retrieve the column code page info from the OLE DB provider.  If the component supports the &#8220;DefaultCodePage&#8221; property, the code page from that property will be used.  Change the value of the property if the current string code page values are incorrect.  If the component does not support the property, the code page from the component&#8217;s locale ID will be used.</i></font></p>
<p>Bu mesaj bir hata mesajı olayıp sadece kullanıcıyı doğru karakter setinin kullanılmadığı konusunda uyarmaktadır. Bundan kurtulmanın yolu şudur;<br />
OLE DB Source component&#8217;in bulunduğu Data-Flow içerisine girilir.<br />
OLE DB Source component&#8217;e ait Properties penceresi açtırılır. Bunun için bileşen sağ tıklanarak Properties menüsü kullanılabileceği gibi bir kere tıklanarak F4 tuşu da kullanılabilir.<br />
Properties penceresinde <b>AlwaysUseDefaultCodePage</b> özelliği True olarak set edilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2008/12/31/oracle-sql-server-data-import-code-page-uyarisi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SSIS paketi SQL Server Agent job&#8217;da çalışmıyor</title>
		<link>http://www.ahmetkaymaz.com/2008/12/31/ssis-paketi-sql-server-agent-jobda-calismiyor/</link>
		<comments>http://www.ahmetkaymaz.com/2008/12/31/ssis-paketi-sql-server-agent-jobda-calismiyor/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 07:54:20 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[SQL Server, Oracle]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=276</guid>
		<description><![CDATA[VS.NET&#8217;te hazırladığımız Integration Services projesindeki DTSX paketlerini belli periyotlarda çalışması için SQL Server Agent üzerinde Job tanımlarız. Job içerisinde SSIS paketini çağırdığımızda özellikle paket içerisinde tanımlanmış olan veritabanı bağlantısı, dosya işlemleri gibi bazı kaynaklara erişimin gerçekleşmediğine şahit oluruz. Örneğin source veya destination olarak tanımlanmış olan SQL Server sunucularına erişmeye çalışırken aşağıdaki gibi hata mesajları alabiliriz.
[OLE [...]]]></description>
			<content:encoded><![CDATA[<p>VS.NET&#8217;te hazırladığımız Integration Services projesindeki DTSX paketlerini belli periyotlarda çalışması için SQL Server Agent üzerinde Job tanımlarız. Job içerisinde SSIS paketini çağırdığımızda özellikle paket içerisinde tanımlanmış olan veritabanı bağlantısı, dosya işlemleri gibi bazı kaynaklara erişimin gerçekleşmediğine şahit oluruz. <span id="more-276"></span>Örneğin source veya destination olarak tanımlanmış olan SQL Server sunucularına erişmeye çalışırken aşağıdaki gibi hata mesajları alabiliriz.</p>
<p><font color='red'>[OLE DB Source [1]] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.  The AcquireConnection method call to the connection manager &#8220;Sunucu Adi&#8221; failed with error code 0xC0202009.  There may be error messages posted before this with more information on why the AcquireConnection method call failed.</font></p>
<p>veya</p>
<p><font color='red'>Failed to decrypt protected XML node &#8220;DTS:Password&#8221; with error 0&#215;8009000B &#8220;Key not valid for use in specified state.&#8221;. You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available.</font></p>
<p>Bu sorunun muhtemel 2 nedeni bulunmaktadır;<br />
1-SSIS paketinin yaratıcısı ile bu paketin SQL Server Agent altında çalıştıran kullanıcı farklıdır.<br />
2-SQL Server Agent kullanıcısının veritabanlarıyla bağlantı kurmaya veya SSIS içerisinde kullanılan diğer kaynaklara erişme yetkisi bulunmamaktadır.</p>
<p>Bu sorunun çözümüne geçmeden önce aşağıdaki bilgiyi vermemiz faydalı olacaktır;<br />
SSIS paketindeki <b>ProtectionLevel</b> özelliği paketteki veritabanı bağlantı şifresi gibi özel bilgilerin yazma ve okuma esnasında şifreleme düzeyini belirtir. Varsayılan <b>EncryptSensitiveWithUserKey</b> değerine sahip olan bu özellik sözkonusu SSIS paketindeki verileri mevcut kullanıcının profil ayarına göre şifreler. Bu durumda sadece aynı profile sahip kullanıcılar bu paketi çalıştırabilir. Eğer farklı kullanıcılar paketi çalıştıracak olursa önemli hassas bilgileri boş olarak değerlendirilir. <b>ProtectionLevel</b> özelliği için kullanılabilecek diğer değerler şunlardır;</p>
<ul>
<li><b>DontSaveSensitive :</b> DTSX dosyası kayıt edildiği zaman içindeki özel bilgilerin dosyaya kayıt edilmesi engellenir. Örneğin veritabanı bağlantısında şifre kullanılmışsa DTSX dosyası içerisinde ilgili alan şu şekilde görünecektir.
<p>	<i>&lt;DTS:Password DTS:Name=&quot;Password&quot; Sensitive=&quot;1&quot;&gt;&lt;/DTS:Password&gt;</i></p>
<li><b>EncryptSensitiveWithUserKey :</b> Bu durumda hassas bilgiler mevcut kullanıcının profile göre şifrelenir. Sözkonusu password alanı bu durumda aşağıdaki gibi yazdırılır.
<p>	<i>&lt;DTS:Password DTS:Name=&quot;Password&quot; Sensitive=&quot;1&quot; Encrypted=&quot;1&quot;&gt;AQAAANCMnd8BFdE&#8230;&#8230;.&lt;/DTS:Password&gt;</i></p>
<li><b>EncryptSensitiveWithPassword :</b> Bu seçenekte paketteki önemli alanlar encrypt ederken bir şifre kullanılır. kullanıcının belirleyeceği şifre Security » PackagePassword bölümüne girilir. DTSX dosyasının çalıştırılması durumunda sözkonusu şifrenin de girilmesi gerekmektedir.
<li><b>EncryptAllWithUserKey, EncryptAllWithPassword :</b> Bu seçeneklerin önceki seçeneklerden tek farkı sadece önemli verileri değil tüm DTSX dosyasını encrypt edilir. Böylece dosya içeriğinin başka bir kullanıcı tarafından görülmesi okunması engellenmiş olur.
<li><b>ServerStorage :</b> SQL Server database rolerini kullanarak paketi korur. Bu seçenek paketin sadece SQL Server  msdb veritabanına kayıt edildiği zaman kullanılabilir. Nitekim bu seçenek aktiften DTSX dosyası dosya sistemine yazılmaz.
</ul>
<p>Şimdi makaledeki sorunu aşmak için kullanılabilecek yöntemlere bakalım;</p>
<p>1 - <b>SQL Server Agent proxy account</b> kullanımı<br />
SQL Server Agent için bir proxy hesabı oluşturulabilir. Bu hesabın hem job&#8217;ları çalıştırma yetkisi olmalı hem de DTSX dosyalarının sahibi olması gerekmektedir. Bu yöntem aynı makine üzerinde hem SQL Server Agent&#8217;in çalıştırıldığı hem de DTSX dosyalarının oluşturulduğu durumlarda anlamlıdır. Sözkonusu DTSX dosyaları başka bir makineye taşındığı zaman SQL Server Agent kullanıcısı farklı olacağından dolayı sorun yaşanabilir.</p>
<p>2 - <b>ServerStorage </b> seçeneği<br />
SSIS paketinin ProtectionLevel özelliği ServerStorage olarak set edilir. Bu seçenek paketi doğrudan SQL Server&#8217;da saklar ve SQL Server database rollerinin kullanılmasını sağlar.</p>
<p>3 - <b>ProtectionLevel = EncryptSensitiveWithPassword </b> değeri<br />
SSIS paketinin koruma düzeyini EncryptSensitiveWithPassword olarak set ederek bir çözüm oluşturabiliriz. SQL Server Agent Job içerisinden bu şifre girilerek SSIS paketi çalıştırılır.</p>
<p>4 - <b>SSIS Package configuration</b> dosyası oluşturmak<br />
SSIS ile en önemli özelliklerden biri çalışma anınca paket içerisindeki property&#8217;lerin dışarıdan command line üzerinden veya konfigürasyon dosyası üzerinden set edilebiliyor olmasıdır. Konfigürasyon dosyasının içine paketteki hassas bilgilerin değerlerini yazdırılır. SSIS paketinin koruma düzeyinin ProtectionLevel olarak kayıt ettiğimizde tasarım aşamasında hassas bilgiler pakete yazılmayacağı için çalışma anında config dosyasından okuma yapılabilir. </p>
<p>SSIS paketini yapılandırma değerlerini saklamak için XML tabanlı bir konfigürasyon dosyası kullanılabildiği gibi Registry entry, Environment variable veya SQL Server table de kullanılabilir. SSIS konfigürasyonu için &#8220;SSIS » Package Configurations&#8221; menüsünden &#8220;Package Configurations Organizer&#8221; penceresi kullanılır. Bu pencerede Add, Edit, Remove düğmeleri kullanılarak paket içerisindeki nesneler ve onlara ait property&#8217;ler için değerler tanımlanabilir. Örneğin içeride kullanılmış olan veritabanı bağlantı şifreleri bu dosyada tutulabilir.</p>
<p>Bu işlemden sonra DTSX dosyasının içerisine aşağıdaki gibi satır eklenir.</p>
<p>&lt;DTS:Property DTS:Name=&quot;ConfigurationString&quot;&gt;C:\dtsConfig Dosyasinin Yolu&lt;/DTS:Property&gt;</p>
<p>Job veya Command Line üzerinden SSIS paketini çalıştırmak için DTEXEC komutuna aşağıdaki gibi parametre yazılır.</p>
<p>/FILE &#8220;C:\Package1.dtsx&#8221;  /CONFIGFILE &#8220;C:\SSIS_Ayarlar.dtsConfig&#8221; /CHECKPOINTING OFF /REPORTING E</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2008/12/31/ssis-paketi-sql-server-agent-jobda-calismiyor/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Olmert&#8217;in insafına kalmadı Gazze</title>
		<link>http://www.ahmetkaymaz.com/2008/12/30/olmertin-insafina-kalmadi-gazze/</link>
		<comments>http://www.ahmetkaymaz.com/2008/12/30/olmertin-insafina-kalmadi-gazze/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 21:10:07 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[Günlük Yaşam]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=231</guid>
		<description><![CDATA[Bizi soracak olursanız biz çok öfkeliyiz..
Kimsin sen Kim?
Adının içinde yanlışlıkla mertlik geçen kan heykeli adam &#8230;
Kimsin sen&#8230;
Seni çekiç suyuyla mı beslediler&#8230;
Asitli diken kundağında mı büyüdün.
Evinizin penceresi hep merhametsizliğe mi baktı küçükken.
Annen saçlarını çamurla mı yıkadı&#8230;
Sınıfta en arka sırada oturup, tahtaya kalaşnikofla mı kalktın..
En sevdiğin hayvan yılan mıydı senin&#8230;
Rezil mi olurdun arkadaşlarına bir kuşu öldürmeyince&#8230;
Defterin köpeklerle [...]]]></description>
			<content:encoded><![CDATA[<p>Bizi soracak olursanız biz çok öfkeliyiz..</p>
<p>Kimsin sen Kim?<br />
Adının içinde yanlışlıkla mertlik geçen kan heykeli adam &#8230;<br />
Kimsin sen&#8230;<br />
Seni çekiç suyuyla mı beslediler&#8230;<br />
Asitli diken kundağında mı büyüdün.<br />
Evinizin penceresi hep merhametsizliğe mi baktı küçükken.<br />
Annen saçlarını çamurla mı yıkadı&#8230;<br />
Sınıfta en arka sırada oturup, tahtaya kalaşnikofla mı kalktın..<br />
En sevdiğin hayvan yılan mıydı senin&#8230;<br />
Rezil mi olurdun arkadaşlarına bir kuşu öldürmeyince&#8230;<br />
Defterin köpeklerle mi kaplıydı.<br />
Seni Rahibe terasalar mı kutsadı&#8230;<br />
<span id="more-231"></span><br />
Kimsin sen Kim?<br />
Saçlarının arasında mıydı bitlenmiş bombalar&#8230;<br />
Vicdansızlık ormanının tanrısız kralı mıydın.<br />
Isırgan otlarını mı dişledi ateş yutan ağzın&#8230;<br />
İnsan olmayacaksan niye giydin bu şehrin ölümünü&#8230;<br />
Düğününde sırtlanlar mı çekti fotograflarını<br />
Eve giderken ekmek yerine kurt mu kaptın mermi fırınlarından&#8230;</p>
<p>Bizi soracak olursanız biz çok öfkeliyiz&#8230;<br />
Olmertin insafına kalmadı Gazze&#8230;<br />
Olmertin insafına tenezzül etmeyen Gazze&#8217;li çocukların ruhuna düğüm düğüm cennet sessizliği diliyoruz&#8230;</p>
<p>Bırakalım Olmertin ikinci adını Allah koysun&#8230;<br />
Allah koysun&#8230;</p>
<p>Bizi soracak olursanız biz Olmertin insan olmadığını düşünmeye devam ediyoruz.. </p>
<p><i>Esra Elönü</i></p>
<p><!--IHH Banner BASLA--><br />
<a href="http://www.ahmetkaymaz.com/go.php?http://www.ihh.org.tr/" target="_blank"><br />
<img src="http://www.ahmetkaymaz.com/wp-content/uploads/Filistine_Yardim.jpg" align="center" border="0"></a><br />
<!--IHH Banner BITIR--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2008/12/30/olmertin-insafina-kalmadi-gazze/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SQL Server Data Replication İlgili Notlar</title>
		<link>http://www.ahmetkaymaz.com/2008/05/20/sql-server-data-replication-ilgili-notlar/</link>
		<comments>http://www.ahmetkaymaz.com/2008/05/20/sql-server-data-replication-ilgili-notlar/#comments</comments>
		<pubDate>Tue, 20 May 2008 20:18:05 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[SQL Server, Oracle]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=275</guid>
		<description><![CDATA[Bu yazıda SQL Server Replication ile ilgili forumlarda veya site üzerinden gelmiş olan sorulara verdiğim yanıtları ve deneyimlerimi paylaşıyor olacağım.
1 - &#8220;Error 14114: (NULL) is not configured as a distributor&#8221; hatası
Bu hatanın alınmasının nedeni local sunucunun remote server olarak tanımlanmamış olmasıdır. Nitekim select @@servername ifadesi null döndürecektir. Eğer sysservers tablosunda kayıt var ise sp_dropserver &#8216;SunucuAdi&#8217;,'droplogins&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Bu yazıda SQL Server Replication ile ilgili forumlarda veya site üzerinden gelmiş olan sorulara verdiğim yanıtları ve deneyimlerimi paylaşıyor olacağım.<span id="more-275"></span></p>
<p><b><font color='#0086ab'>1 - &#8220;Error 14114: (NULL) is not configured as a distributor&#8221; hatası</font></b></br><br />
Bu hatanın alınmasının nedeni local sunucunun remote server olarak tanımlanmamış olmasıdır. Nitekim <i>select @@servername</i> ifadesi null döndürecektir. Eğer <b>sysservers</b> tablosunda kayıt var ise <i>sp_dropserver &#8216;SunucuAdi&#8217;,'droplogins&#8217;</i>  ifadesi çalıştırılıp ilgili sunucu kaydı silinir. Ardından aşağıdaki gibi yerel sunucu eklenir;</p>
<p><br/><i>sp_addserver &#8216;YerelSunucuAdi&#8217;, &#8216;local&#8217;</i></p>
<p><br/>Daha sonra servis yeniden başlatılır.</p>
<p><br/><b><font color='#0086ab'>2 - </font></b>Replike edilen bir tabloya yeni bir kolon eklemek veya var olan bir kolonu çıkarmak veya kolonun tipini değiştirdiğimizde o tablonun replike ediliği otomatik abonelerin yeniden initialize edilmesi gerekir. Bu durumda abonedeki tablo drop edilir yeniden create edilip ardından bulk insert yapılır.</p>
<p><br/><b><font color='#0086ab'>3 - </font></b>Bazı durumlarda distributor tarafındaki UPDATE işlemi Subscriber tarafında DELETE / INSERT olarak uygulanabilir. Bunun nedeni değişen alanın üzerinde unique constraint olmasıdır. Konuyla ilgili olarak aşağıdaki sayfa incelenebilir.<br />
<a href="http://support.microsoft.com/kb/238254" target='_blank'>http://support.microsoft.com/kb/238254</a></p>
<p><br/><b><font color='#0086ab'>4 - </font></b>Snapshot folder olarak share edilmiş bir alanın verilmemesi veya Subscriber&#8217;ların erişmeyeceği bir alanın verilmesi ancak push subscription&#8217;a destek verir. Network path vermek daha mantıklı olacaktır.Network pathin verilmesi durumunda bu share folderin pull subscription gibi diğer makinelerde çalışan agentler tarafından erişilebiliyor olması gerekir.</p>
<p><br/><b><font color='#0086ab'>5 - </font></b>Bir aboneyi yaratırken manual mi yoksa otomatik mi Initialize edileceği belirtilir. Eğer manual olarak set edilmiş bir abone ise o anda veya daha sonra kaynak sunucunun o sunucuyu ilklendirilmesi sağlanamaz. Reinitialize etmek için o aboneyi drop edip yeniden create etmek lazım. Eğer otomatik olarak set edilmişse <i>Replication » Publications</i> bölümü altındaki aboneyi sağ tıklayıp <b>Reinitialize</b> menüsünü seçtiğimizde yeniden ilklendirilmiş olur. Eğer manual yöntemini tercih etmişsek replike edilecek tabloları ve replikasyon prosedürelerini aboneler üzerinde oluşturmak lazım. Örneğin üzerinde replikasyon prosedürlerinin yaratılmadığı aboneyi senkronize etmek istediğimizde <font color='red'>Could not find stored procedure &#8217;sp_MSins&#8230;</font>  gibi bir hata alırız. Replikasyon prosedürlerine ait scripti oluşturmak için publish edilmiş olan database üzerinde<br /> sp_scriptpublicationcustomprocs [ @publication = ] &#8216;publication_name&#8217; <br />prosedürü kullanılır. Bu prosedür her tablolar için çalışacak olan INSERT, UPDATE ve DELETE prosedürlerinin içeriğini oluşturur. Üretilen SQL scripti abone üzerinde çalıştırmak yeterli olacaktır. </p>
<p><br/><b><font color='#0086ab'>6 - </font></b>Manual initialization işleminde dikkat edilmesi gereken en önemli konu kaynak veritabanı üzerinde önceki kayıtlarda yani abonede olmayan kayıtlarda bir değişiklik olursa abonede o kayıt olmadığı için UPDATE / DELETE işlemi hata verecektir. <font color='red'>&#8220;&#8216;The row was not found at the Subscriber when applying the replicated command.&#8217;&#8221;</font>  hata mesajıyla karşılaşılır. Bu kayıt abonede oluşturulmadığı sürece yani bu hata giderilmediği sürece replikasyon o noktada takılıp devam etmeyecektir.<br />
<br/><br />
Eğer replikasyonun yapıldığı sistemler SQL Server ise aboneler üzerinde her tablo için &#8220;sp_MS&#8230;&#8221; ile başlayan INSERT/DELETE/UPDATE procedure&#8217;leri oluşturulur. Bu prosedürlerin aldığı parametreler o tablonun o anda replikasyona dahil edilmiş olan kolonlarına göre oluşturulur. Eğer daha sonradan tabloların şemaları değişirse veya replikasyonda kolon ekleme/çıkarma olursa bu prosedürleri yeniden abonelerde oluşturmak gerekir. Eğer replikasyon heterojen sistemler arasında yapılırsa yani SQL Server - Oracle arasında yapılırsa o zaman subscriber olan Oracle üzerinde bu prosedürler oluşturulmaz (&#8221;<b>Heterogeneous Database Replication</b>&#8220;). Normal UPDATE, DELETE, INSERT SQL cümleleri gönderilir. Abonelere gönderilecek komutlar <b>MSrepl_commands</b> ve <b>MSrepl_transactions</b>  tablolarında binary formatında tutulur.</p>
<p><br/><b><font color='#0086ab'>7 - Replikasyon işleminde Distribution hataları atlamak.</font></b><br />
<br/><br />
Replikasyon, Publisher&#8217;da meydana gelen her transaction Distributor&#8217;a gönderilir. O da ilgili Subscriber&#8217;a gönderir. Bu süreçte INSERT / UPDATE / DELETE işlemlerinde birinde hata meydana gelirse o işlem rollback edilir veya sonraki transactionlar işlenmez. Bu şekilde herhangi bir hatanın meydana gelmesi durumunda o hatayı görmemezden gelip sonraki transactionların abonelerde uygulaması için &#8220;Distribution Agent&#8221; için <b>-SkipErrors</b> parametresi kullanılabilir. Bu parametreye o hata veya hataların numaraları girilerek o hataların görmemezlikten gelinmesi sağlanabilir. Bunun için &#8220;<i>Publisher and Distributor Properties</i>&#8221; penceresindeki <b>Distributor</b> sekmesinde <b>Agent Profiles</b> tıklanarak yeni bir profil tanımlanır. Replikasyon agent&#8217;lerin çalıştığı default profile göre hatanın olması durumunda sistem devam etmez. <b>SkipErrors</b> değerinin karşısında mevcut hata numaralarının yazıldığı bir profil yaratılır ve servis yeniden başlatılarak bu profilin devreye girmesi sağlanır. Hata giderildikten sonra yeniden default profile kullanılabilir.</p>
<p><br/><b><font color='#0086ab'>8 - </font></b>Replikasyonda sadece replikasyona dahil edilmiş kolonlarla ilgili transactionlar abonelere gönderilir. Örneğin AdSoyad ve Sehir kolonlarının bulunduğu kaynak tablosunda sadece AdSoyad kolonu replike ediliyorsa sadece Sehir kolonu update edildiği zaman aboneye herhangi bir update cümlesi gönderilmez aynı şekilde AdSoyad ve Sehir aynı anda update edilirse sadece AdSoyad kolonun update bilgisi aboneye ulaşır. Replikasyonun güzel yanı replikasyona dahil edilmiş kolonlar içerisinden gerçekten update edilmiş olanları abonelere gönderir. Örneğin tabloda Sehir=&#8217;Ankara&#8217; ve AdSoyad=&#8217;Ahmet&#8217; olan kayıt için <br />UPDATE Musteri SET Sehir=&#8217;İstanbul&#8217;,AdSoyad=&#8217;Ahmet&#8217; WHERE MusteriId=1<br /> sorgusunu çalıştırdığımızda abonelere sadece <br />UPDATE Musteri SET Sehir=&#8217;İstanbul&#8217; WHERE MusteriId=1<br /> sorgusu gönderilecektir. Aynı update cümlesini çalıştırdığımızda abonelere herhangi bir güncelleme emri gönderilmeyecektir.</p>
<p><br/><b><font color='#0086ab'>9 - </font></b>Article&#8217;larda bir değişiklik yapıldığı zaman yani replikasyona yeni bir kolon eklendiği veya var olan bir kolon çıkarıldığı zaman tüm subscription&#8217;lar reinitialize olacak şekilde işaretlenir. Onları yeniden ilklendirmek gerekir. Bu durum automatic initialization destekli subscription&#8217;lar için geçerli. Bu durumda reinitialization işlemi bir sonraki Snapshot Agent ve Distribution Agent&#8217;lerin çalışmasıyla gerçekleşir. Manual initialization destekli olan aboneleri manual olarak ilklendirmek gerekir. </p>
<p><br/><b><font color='#0086ab'>10- Snapshot dosyaları nelerdir </font></b></p>
<p>İlklendirme işlemi için gerekli olan Snapshot dosyaları şunlardır; schema (.sch); data (.bcp); constraint ve index&#8217;ler (.dri); constraint&#8217;ler (.idx); trigger&#8217;ler (.trg):sıkıştırılmış snapshot dosyaları (.cab). Bu ilklendirme dosyaları transactional publication için <b>sp_browsesnapshotfolder</b> prosedürü, merge publication için <b>sp_browsemergesnapshotfolder</b> prosedürü kullanılarak görülebilir. Bu prosedürler publisher üzerinde çalıştırılır.</p>
<p><br/><b><font color='#0086ab'>11 - </font></b>Replikasyona dahil edilmiş olan bir kolonu kaldırmak istediğimizde &#8220;<font color='red'>ALTER TABLE DROP COLUMN failed because  is currently replicated.</font>&#8221; gibi bir hatayla karşılaşırız. Bunu çözmenin en doğru yolu replikasyonu durdurmak, sözkonusu kolonu replikasyonda çıkarıp ardından DROP etmektir.</p>
<p><br/><b><font color='#0086ab'>12 - </font></b>&#8220;<font color='red'>SQL Server Enterprise Manager could not configure &#8216;TESTSERVER&#8217; as the Distributor for &#8216;TESTSERVER&#8217;. Error 21112: &#8216;-PollingInterval&#8217; is not a valid parameter for the Log Reader Agent</font>&#8221; hatası sunucunun Turkish collation  kullanıyor olmasından kaynaklanmaktadır. Bu hatayı gidermek için en az SQL Server 2000 Service Pack 1 kurmak lazım. Daha fazla bilgi için aşağıdaki adres incelenebilir.</p>
<p><a href='http://support.microsoft.com/kb/295325'>http://support.microsoft.com/kb/295325</a></p>
<p><br/><b><font color='#0086ab'>13 - </font></b>&#8220;<font color='red'>Message 20554 Severity 10 &#8220;The agent is suspect. No activity reported within the last 10 minutes.</font>&#8221; hatası replication agent&#8217;in SQL Server Enterprise Manager&#8217;e uzun süre durumunu haberdar edemeyişinden kaynaklanır. Bu hata sistem için sıkıntı yaratmaz. Bu hatayla karşılaşıldığı zaman sözkonusu agenti stop etmeyip servisin o anki işini bitirmesini beklemeliyiz. Agent stop edilirse o andaki işlemler rollback edilerek yeniden başlatılır.</p>
<p><br/><b><font color='#0086ab'>14 - </font></b>&#8220;<font color='red'>The process is running and is waiting for a response from one of the backend connections</font>&#8221; hatası nedir ?<br />
Bazı durumlarda Log Reader bu veya buna benzer bir mesaj verebilir. Bu bir hata olmayıp sistemin o an için meşgul olduğu karşı abonelerin tam olarak COMMIT edilmeyi beklediğini anlatır. Örneğin msrepl_transaction  tablosunda işlenecek veya işlemin transcationlar fazla olduğu zaman böyle bir uyarı verilir. Veya snapshot data aboneye yansıtıldıktan sonra tablolara ait indexler çalıştırıldığı zaman da bu uyarı verilir. Bunun için sunucunun işlemini beklemekte fayda vardır. Bir süre sonra normale geçecektir. Bu hata mesajını kısa sürede elde etmemek için Agent için daha yüksek timeout değerine sahip bir profil oluşturulabilir.</p>
<p><br/><b><font color='#0086ab'>15 - </font></b>&#8220;<font color='red'>The system cannot find the file specified&#8230;.</font>&#8221; hatası<br />
Bu hatayı genellikle snapshot agent çalışmaya başlarken hata verir. Bunun sebebi &#8220;C:\Program Files\Microsoft SQL Server\80\COM\&#8221; klasörünün altında replikasyon ile ilgili exe dosyalarının eksik olması olabilir.SP3 yeniden kurulabileceği gibi başka bir makineden ilgili exe ve dll dosyaları da kopyalanabilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2008/05/20/sql-server-data-replication-ilgili-notlar/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Kontrol Geliştirme - III [Rendered Control]</title>
		<link>http://www.ahmetkaymaz.com/2008/05/11/web-kontrol-rendered-control/</link>
		<comments>http://www.ahmetkaymaz.com/2008/05/11/web-kontrol-rendered-control/#comments</comments>
		<pubDate>Sun, 11 May 2008 21:54:18 +0000</pubDate>
		<dc:creator>Ahmet Kaymaz</dc:creator>
		
		<category><![CDATA[C#, VB.NET, ASP.NET]]></category>

		<guid isPermaLink="false">http://www.ahmetkaymaz.com/?p=267</guid>
		<description><![CDATA[Özel şekillendirilmiş kontrol olarak tanımlayacağımız bu kontroller, Control veya WebControl sınıflarından doğrudan türetilmiş olup, programcı tarafından belirlenmiş HTML içeriği render eder. WebControl sınıfı, Control sınıfından inherit edilmiş olup Control sınıfının özellikleriyle beraber kontrollerin renk, font gibi görsel yönlerinin yönetilmesini sağlayan özellikler sunar. Bu yöntemle geliştirilmiş kontrolün tag yapısını ve içeriğini genellikle programcı HTML ifadeler yazarak [...]]]></description>
			<content:encoded><![CDATA[<p>Özel şekillendirilmiş kontrol olarak tanımlayacağımız bu kontroller, <b>Control</b> veya <b>WebControl</b> sınıflarından doğrudan türetilmiş olup, programcı tarafından belirlenmiş HTML içeriği render eder. <b>WebControl</b> sınıfı, <b>Control</b> sınıfından inherit edilmiş olup <b>Control</b> sınıfının özellikleriyle beraber kontrollerin renk, font gibi görsel yönlerinin yönetilmesini sağlayan özellikler sunar. Bu yöntemle geliştirilmiş kontrolün tag yapısını ve içeriğini genellikle programcı HTML ifadeler yazarak oluşturur. Bunu da daha önce kendisinden bahsettiğimiz <b>HtmlTextWriter</b> nesnesi aracılığıyla yapar. Bu bölümde daha detaylı göreceğimiz <b>HtmlTextWriter</b> sınıfı, kontrolleri render edip HTML çıktısını oluşturma, elementlere ait attribute tanımlamaları yapma, style attribute oluşturma gibi servisleri sağlar. <span id="more-267"></span><b>HtmlTextWriter</b> sınıfının bu amaçla kullanılan önemli metodları şunlardır;</p>
<p><b>AddAttribute():</b> RenderBeginTag() metodu tarafından açılmış HTML tagına attribute ekler.</p>
<p><b>AddStyleAttribute():</b> RenderBeginTag() metodu tarafından açılmış HTML tagına CSS attribute ekler.</p>
<p><b>RenderBeginTag():</b> Bir başlangıç HTML tagını render eder.</p>
<p><b>RenderEndTag():</b> Bir bitiş HTML tagını render eder.</p>
<p><b>Write():</b> Browserda görünmek üzere düz metin yazdırır.</p>
<p><b>WriteBreak():</b> &lt;br/&gt; HTML tagını yazdırır.</p>
<p><b>AddAttribute()</b> veya <b>AddStyleAttribute()</b> methodlarını ihtiyacımız kadar birden fazla kullanabiliriz. Bu tür metodları, <b>RenderBeginTag()</b> metodundan önce çağırmaya dikkat etmeliyiz. <b>RenderBeginTag()</b> metodu çalıştığı zaman bütün attributeler açılış tagına eklenmiş olur.</p>
<p>HtmlTextWriter sınıfına ait bu metodlar parametre olarak string veya aşağıdaki enumeration türündeki değerleri alır;</p>
<p><b>HtmlTextWriterTag:</b> En çok kullanılan HTML taglarının listesini içerir.</p>
<p><b>HtmlTextWriterAttribute:</b> En çok kullanılan HTML attributelerinin listesini içerir.</p>
<p><b>HtmlTextWriterStyle:</b> En çok kullanılan CSS attributelerinin listesini içerir.</p>
<p>Özel kontrol geliştirirken işlemlerin doğru zamanda gerçekleşmesi açısından taban aldığımızın sınıfın(Control veya WebControl) hangi metodlarını override edeceğimiz önem arzetmektedir. <b>Control</b> ve <b>WebControl</b> sınıfların ortak ve ayrık metodları bulunur. Yeri geldikçe bu metodlardan bahsedeceğiz. Şimdilik WebControl&#8217;ün başlangıç için bilmemiz gereken metodlarından bahsedelim;</p>
<p><b>RenderBeginTag():</b> Açılmış HTML tagını açılma aşamasında özel bir içerikle render etmek için kullanılır. Parametre olarak HtmlTextWriter türünde değer alır.</p>
<p><b>RenderEndTag():</b> Açılmış HTML tagını kapatılma aşamasında özel bir içerikle render etmek için kullanılır. Parametre olarak HtmlTextWriter türünde değer alır.</p>
<p><b>ApplyStyle():</b> Web kontrolüne style uygulamak için kullanılır. Parametre olarak System.Web.UI.WebControls.<b>Style</b> türünde değer alır.</p>
<p><b>CopyBaseAttributes() :</b> Bir web server kontrolünün Style sınıfından türememiş olan property&#8217;lerini bu metodu çağıran kontrole kopyalamak için kullanılır. CopyBaseAttributes() metodu, <b>WebControl</b> türünde parametre alıp kaynak kontrolün <b>AccessKey, Enabled, ToolTip, TabIndex</b> ve <b>Attributes</b> property&#8217;lerini kopyalar.</p>
<p><b>Render():</b> HtmlTextWriter türünde değer alarak kontrolün istemci tarafındaki HTML element içeriğini oluşturur.</p>
<p>Bir ASP.NET sayfası çalıştırıldığı zaman, sayfa içerisindeki web kontrollerinin <b>RenderControl()</b> metodlarına HtmlTextWriter nesnesi gönderilerek çağrılır. <b>RenderControl()</b> metodu, kontrole ait protected modundaki <b>Render()</b> metoduna elçilik eder. <b>Render()</b> metodu, <i>RenderBeginTag(), RenderContents()</i> ve <i>RenderEndTag()</i> metodlarını uygular. Bu üç metod da daha önce parametre olarak RenderControl() metoduna gönderilmiş aynı HtmlTextWriter nesnesini kullanılır. Her metod, görevleri doğrultusunda oluşturduğukları HTML çıktıyı, HtmlTextWriter nesnesine ekler. Bu metodların tamamlanmasından sonra ASP.NET engine, kontrolden geri dönen HtmlTextWriter nesnesini handle eder ve ona göre browsera gönderilecek HTML çıktıya ekler. Custom kontrol geliştiriken bu metodların hepsi kullanılmak zorunda değildir. Sadece <b>Render()</b> veya <b>RenderContents()</b> metodlarıyla ilgili HTML çıktı oluşturulabilir.</p>
<p>Doğrudan Control sınıfından inherit edilmiş custom kontrollerde genellikle <b>Render()</b> metodu kullanılır. Aşağıdaki örnekte basit bir custom kontrol kodu gösterilmiştir. Bu kontrol, büyüklüğü ve rengi bizim tarafımızdan belirlenen bir başlık oluşturur.</p>
<p><b>[Baslik.vb]</b></p>
<pre name="code" class="vb">Imports System.Web.UI 'Control,HtmlTextWriter

Namespace OrnekWebKontrol
    Public Class Baslik : Inherits Control
        Private _boyut As Integer
        Private _metin As String

        'Başlığın font büyüklüğü
        Public Property Boyut() As Integer
            Get
                Return _boyut
            End Get
            Set(ByVal value As Integer)
                _boyut = Value
            End Set
        End Property 'Boyut

        'Başlığın içeriği
        Public Property Metin() As String
            Get
                Return _metin
            End Get
            Set(ByVal value As String)
                _metin = Value
            End Set
        End Property 'Metin

        Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
            writer.Write("&lt;font size=" &#038; _boyut &#038; "&gt;")
            writer.Write(_metin)
            writer.Write("&lt;/font&gt;")
            MyBase.Render(writer)
        End Sub
    End Class 'Baslik
End Namespace 'OrnekWebKontrol</pre>
<p><b>[Baslik.cs]</b></p>
<pre name="code" class="csharp">using System.Web.UI; //Control,HtmlTextWriter

namespace OrnekWebKontrol
{
    public class Baslik : Control
    {
        private int _boyut;
        private string _metin;

        //Başlığın font büyüklüğü
        public int Boyut
        {
            get
            {
                return _boyut;
            }
            set
            {
                _boyut = value;
            }
        }//Boyut

        //Başlığın içeriği
        public string Metin
        {
            get
            {
                return _metin;
            }
            set
            {
                _metin = value;
            }
        }//Metin

        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write("&lt;font size=" + _boyut + "&gt;");
            writer.Write(_metin);
            writer.Write("&lt;/font&gt;");
            base.Render(writer);
        }
    }//Baslik
}//OrnekWebKontrol</pre>
<pre name="code" class="html"><%@ Register Assembly="OrnekWebKontrol"
	Namespace="OrnekWebKontrol" TagPrefix="cc1" %>
. . . . .
<form id="form1" runat="server">
    <cc1:Baslik ID="Baslik1" runat="server"
        Boyut="4" Metin="En çok satanlar">
    </cc1:Baslik>
</form>
</pre>
<p><img src="http://www.ahmetkaymaz.com/wp-content/uploads/Web_Custom_Control_3.jpg"></p>
<p>Örneğimizi, konunun başında bahsettiğimiz metodları kullanarak ta oluşturabiliriz. Baslik dosyasına ZeminRenk isimli bir property ekleyip Render metodunu aşağıdaki gibi düzenleyelim.</p>
<p><b>[Baslik.vb]</b></p>
<pre name="code" class="vb">Public Class Baslik : Inherits Control
        . . .
        Private _zeminRenk As String

        'Fontun zemin rengi
        Public Property ZeminRenk() As String
            Get
                Return _zeminRenk
            End Get
            Set(ByVal value As String)
                _zeminRenk = Value
            End Set
        End Property 'ZeminRenk

        Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
            writer.AddAttribute("size", _boyut.ToString())
            writer.AddStyleAttribute("background-color", ZeminRenk)
            writer.RenderBeginTag("font")
            writer.Write(_metin)
            writer.RenderEndTag()
        End Sub 'Render
    End Class 'Baslik</pre>
<p><b>[Baslik.cs]</b></p>
<pre name="code" class="csharp">public class Baslik : Control
{
    . . .
    string _zeminRenk;

    //Fontun zemin rengi
    public string ZeminRenk
    {
        get
        {
            return _zeminRenk;
        }
        set
        {
            _zeminRenk = value;
        }
    }//ZeminRenk

    protected override void Render(HtmlTextWriter writer)
    {
        writer.AddAttribute("size", _boyut.ToString());
        writer.AddStyleAttribute("background-color", ZeminRenk);
        writer.RenderBeginTag("font");
        writer.Write(_metin);
        writer.RenderEndTag();
    }//Render
}//Baslik</pre>
<p>Kontrolü, bu haliyle tasarım anında sayfanın üzerine eklediğimizde küçük bir nokta olarak görülecektir. Property&#8217;lerini set etmeden mouse ile onu seçmek pek kolay olmayacaktır. Bunu aşmak için _metin değişkenine default bir değer verilebilir.</p>
<p>Private _metin As String = &#8220;Başlık giriniz!&#8221;<br />
private string _metin=&#8221;Başlık giriniz!&#8221;;</p>
<p>Böylece kontrol, sayfanın üzerine taşındığında Metin property&#8217;si &#8220;Başlık giriniz!&#8221; olarak set edilmiş olur.</p>
<p><b><u>PÜF</u></b><br />
TextBox gibi bazı kontrolleri, form elementi içerisinde kullakmak zorundayız. Eğer bu kontrolleri, form elementi dışında tanımlarsak &#8220;&#8230;must be placed inside a form tag with runat=server&#8221; hata mesajıyla karşılaşırız. Bu şekilde geliştirdiğimiz kontrollerin, &#8220;runat=server&#8221; özellikteki form elementinin içerisinde render edilmesini zorunlu kılmak için Page.VerifyRenderingInServerForm() metodu kullanılır. Custom kontrol, bu metoda parametre olarak geçilir. Bu işlemin, AddAttributesToRender() veya Render()/RenderContent() metodlarında yapılması tavsiye edilir.</p>
<pre name="code" class="vb">Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter)
    Dim page As Page = Me.Page
    If (Not page Is Nothing) Then
        page.VerifyRenderingInServerForm(Me)
    End If
    . . .
End Sub</pre>
<pre name="code" class="csharp">protected override void AddAttributesToRender(HtmlTextWriter writer)
{
    Page page = this.Page;
    if (page != null)
    {
        page.VerifyRenderingInServerForm(this);
    }
    . . .
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkaymaz.com/2008/05/11/web-kontrol-rendered-control/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
