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

<channel>
	<title>Systemdoktoru.com &#187; ADO.NET</title>
	<atom:link href="http://www.systemdoktoru.com/makale/ado-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.systemdoktoru.com</link>
	<description>Windows Linux işletim sistemlerinin bilgi deposu</description>
	<lastBuildDate>Fri, 30 Apr 2010 19:02:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Microsoft Visual Basic.NET ve ADO.NET ile SQL Server İşlemleri / 5</title>
		<link>http://www.systemdoktoru.com/2010/04/microsoft-visual-basic-net-ve-ado-net-ile-sql-server-islemleri-5/</link>
		<comments>http://www.systemdoktoru.com/2010/04/microsoft-visual-basic-net-ve-ado-net-ile-sql-server-islemleri-5/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

		<guid isPermaLink="false">http://www.systemdoktoru.com/?p=72</guid>
		<description><![CDATA[5- Verileri Düzenlemek,
Silmek ve Oluşturmak
Bu
bölümde veritabanı uygulamaları konusunda şu ana kadar değinmediğimiz
veritabanına yeni kayıt ekleme, mevcut kayıtları düzenleme ve silme işlemlerini
ele alıyor olacağız. 
ADO.NET
ile Veritabanı İşlemleri
Bu bölümde SQL
Servera veri eklemeyi, mevcut verileri düzenlemeyi ve silmeyi örnekleyen bir
uygulama geliştireceğiz. İşlemlerimizi yine Northwind örnek veritabanı üzerinde
gerçekleştiriyor olacağız. Örneğimizde yeni bazı işlemler göreceğimiz gibi şu
ana kadar gördüğümüz konuları [...]]]></description>
			<content:encoded><![CDATA[<p>5- Verileri Düzenlemek,<br />
Silmek ve Oluşturmak</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bu<br />
bölümde veritabanı uygulamaları konusunda şu ana kadar değinmediğimiz<br />
veritabanına yeni kayıt ekleme, mevcut kayıtları düzenleme ve silme işlemlerini<br />
ele alıyor olacağız. </span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>ADO.NET<br />
ile Veritabanı İşlemleri</span><span style=font-size:10.0pt;font-family:<br />
Verdana><br />
</span></b><span style=font-size:10.0pt;font-family:Verdana>Bu bölümde SQL<br />
Servera veri eklemeyi, mevcut verileri düzenlemeyi ve silmeyi örnekleyen bir<br />
uygulama geliştireceğiz. İşlemlerimizi yine Northwind örnek veritabanı üzerinde<br />
gerçekleştiriyor olacağız. Örneğimizde yeni bazı işlemler göreceğimiz gibi şu<br />
ana kadar gördüğümüz konuları da kullanacağız. Bunun için işe <i>udpInsertANewShipper</i><br />
adlı stored procedureu oluşturarak başlayalım. Bu prosedür <i>Shippers</i><br />
tablosuna, aldığı <i>CompanyName</i> ve <i>Phone</i> parametrelerini ekleyen<br />
bir <i>INSERT INTO</i> ifadesi içermektedir. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana> </span></p>
<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0<br />
 style=background:#E6E6E6;border-collapse:collapse;border:none id="table53"><br />
<tr>
<td width=614 valign=top style=width:460.6pt;border:solid windowtext 1.0pt;<br />
  padding:7.1pt 7.1pt 7.1pt 7.1pt>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&#8211;Northwind veritabanını kullanıyoruz</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">USE Northwind</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">GO</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&#8211;udpInsertANewShipper adında bir SP varsa</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&#8211;yenisini oluşturmadan önce varolanı siliyoruz</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">IF EXISTS (SELECT ROUTINE_NAME </span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    FROM INFORMATION_SCHEMA.ROUTINES</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    WHERE ROUTINE_TYPE = PROCEDURE AND</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    ROUTINE_NAME = udpInsertANewShipper)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    DROP PROCEDURE udpInsertANewShipper</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">GO</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&#8211;udpInsertANewShipper adlı SPyi oluşturuyoruz</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">CREATE PROCEDURE udpInsertANewShipper</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    @CompanyName nchar(40),</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    @Phone nvarchar (24), </span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    @Identity int OUT</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">AS</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">INSERT INTO Shippers (CompanyName, Phone) </span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    VALUES(@CompanyName, @Phone)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">SET @Identity = SCOPE_IDENTITY()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">GO</span></p>
</td>
</tr>
</table>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Uygulamamızın<br />
form tasarımı ise aşağıdaki gibidir:</span></p>
<p  align=center style=text-align:center><span<br />
style=font-size:10.0pt;font-family:Verdana><img width=319 height=277<br />
src="http://www.yazgelistir.com/images/kadir/adonet/image014.jpg"></span></p>
<p  align=center style=text-align:center><b><span<br />
style=font-size:10.0pt;font-family:Verdana>Şekil 5:1  Tasarım Görünümü</span></b></p>
<p  align=center style=text-align:center><b><span<br />
style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Navigasyon<br />
butonlarının hemen altında yer alan dört buton örneğimizin asıl konusu olan<br />
veritabanı kayıt/güncelleme ve silme işlemlerinin gerçekleştirilmesini<br />
sağlayacaktır. Bu butonlardan <i>Temizle </i>ve <i>Ekle </i>butonları birlikte<br />
çalışmaktadır. Temizle butonu yeni girişin yapılabilmesi için metin kutularını<br />
temizleyecektir.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bu<br />
örneğide kodlarla birlikte açıklayacağız. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0<br />
 style=background:#E6E6E6;border-collapse:collapse;border:none id="table54"><br />
<tr>
<td width=614 valign=top style=width:460.6pt;border:solid windowtext 1.0pt;<br />
  padding:7.1pt 7.1pt 7.1pt 7.1pt>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>DataAdapter ve<br />
  DataSet nesnelerine </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>form içindeki<br />
  prosedürlerden </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>erişmek istediğimiz<br />
  için</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>modül seviyesinde<br />
  tanımlıyoruz.</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Dim</span> dap1 <span<br />
  style=color:blue>As</span> SqlDataAdapter</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Dim</span> das1 <span<br />
  style=color:blue>As</span> DataSet</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Sub</span> Populate()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Northwind<br />
  veritabanı bağlantısı</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span> cnn1 <span<br />
  style=color:blue>As</span> SqlClient.SqlConnection = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>New</span><br />
  SqlConnection(&quot;Data Source=(local);&quot; &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;Integrated Security=SSPI;&quot;<br />
  &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;Initial Catalog=northwind&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Yeni bir<br />
  DataAdapter nesnesi oluşturuyor </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>ve<br />
  SelectCommand belirtiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1 = <span style=color:blue>New</span><br />
  SqlDataAdapter _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;SELECT ShipperID, CompanyName,<br />
  Phone &quot; &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;FROM Shippers&quot;, _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            cnn1)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Oluşturduğumuz<br />
  DataAdapter nesnesi için </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>UpdateCommand<br />
  özelliğini belirtiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.UpdateCommand = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            <span style=color:blue>New</span><br />
  SqlCommand _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">                (&quot;UPDATE Shippers &quot;<br />
  &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">                &quot;SET CompanyName =<br />
  @CompanyName, &quot; &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">                &quot;Phone = @Phone &quot; &amp;<br />
  _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">                &quot;WHERE ShipperID =<br />
  @ShipperID&quot;, _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">                cnn1)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>UpdateCommand<br />
  özelliğinin kullanacağı iki</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>parametreyi<br />
  oluşturuyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.UpdateCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;@CompanyName&quot;,<br />
  SqlDbType.NVarChar, 40, _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;CompanyName&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.UpdateCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;@Phone&quot;,<br />
  SqlDbType.NVarChar, 24, _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;Phone&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Hangi satırın<br />
  güncelleneceğini ShipperID alanına </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>göre<br />
  belirleyeceğiz. Shippers tablosundaki orijinal</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>ShipperID<br />
  değerini kullanıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span> prm1 <span<br />
  style=color:blue>As</span> SqlParameter = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            dap1.UpdateCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;@ShipperID&quot;,<br />
  SqlDbType.Int)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        prm1.SourceColumn = &quot;ShipperID&quot;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        prm1.SourceVersion =<br />
  DataRowVersion.Original</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataAdapter<br />
  nesnesinin InsertCommand özelliğinde </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>bir SQL ifadesi<br />
  değil, oluşturduğumuz Stored Procedureu</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>kullanacağız.<br />
  Bu nedenle DataAdapter nesnesinin InsertCommand</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>özelliğinin<br />
  CommandType değerinin CommandType.StoredProcedure</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>olarak<br />
  değiştiriyor ve kullanacağımız SPnin adını belirtiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.InsertCommand = <span<br />
  style=color:blue>New</span> SqlCommand(&quot;udpInsertANewShipper&quot;,<br />
  cnn1)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.InsertCommand.CommandType =<br />
  CommandType.StoredProcedure</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Kullanacağımız<br />
  SP için parametreleri belirtiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.InsertCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;@CompanyName&quot;,<br />
  SqlDbType.NVarChar, 40, _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;CompanyName&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.InsertCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;@Phone&quot;,<br />
  SqlDbType.NVarChar, 24, _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;Phone&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Hangi satırın<br />
  güncelleneceğini yine ShipperID </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>alanına göre<br />
  belirliyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span> prm2 <span<br />
  style=color:blue>As</span> SqlParameter = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            dap1.InsertCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">             (&quot;@Identity&quot;,<br />
  SqlDbType.Int, 0, &quot;ShipperID&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        prm2.Direction = ParameterDirection.Output</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataAdapter<br />
  nesnemizin DeleteCommand özelliğine </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>değer veriyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.DeleteCommand = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            <span style=color:blue>New</span><br />
  SqlCommand(&quot;DELETE &quot; &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;FROM Shippers &quot; &amp; _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            &quot;WHERE ShipperID =<br />
  @ShipperID&quot;, cnn1)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Hangi satırın<br />
  silineceğini yine Shippers tablosundaki</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>ShipperID<br />
  alanına göre belirleyeceğiz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DeleteCommand<br />
  özelliği için kullanacağımız tek parametre</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>olan<br />
  ShipperIDyi tanımlıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span> prm3 <span<br />
  style=color:blue>As</span> SqlParameter = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            dap1.DeleteCommand.Parameters.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            (&quot;@ShipperID&quot;,<br />
  SqlDbType.Int)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        prm3.SourceColumn = &quot;ShipperID&quot;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        prm3.SourceVersion =<br />
  DataRowVersion.Original</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Bağlantıyı<br />
  açıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        cnn1.Open()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataAdapter<br />
  nesnesini kullanarak </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Oluşturduğumuz<br />
  DataSet içinde Shippers adlı</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataTablea<br />
  verileri aktarıyoruz.</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        das1 = <span style=color:blue>New</span><br />
  DataSet</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.Fill(das1, &quot;Shippers&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataSet nesnesi<br />
  ile çalışmak için</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>açık bir<br />
  bağlantıya ihtiyacımız yok</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        cnn1.Close()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>### FORM YÜKLENİYOR<br />
  ###</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Form1_Load(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> <span<br />
  style=color:blue>MyBase</span>.Load</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Form<br />
  yüklenirken verileri DataSete aktarıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        Populate()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Form üzerindeki<br />
  metin kutularını ilgili </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>alanlara<br />
  bağlıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox1.DataBindings.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">           (<span style=color:blue>New</span><br />
  Binding(&quot;Text&quot;, das1, &quot;Shippers.ShipperID&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox2.DataBindings.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">           (<span style=color:blue>New</span> Binding(&quot;Text&quot;,<br />
  das1, &quot;Shippers.CompanyName&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox3.DataBindings.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">           (<span style=color:blue>New</span><br />
  Binding(&quot;Text&quot;, das1, &quot;Shippers.Phone&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>textbox1i<br />
  read-only hale getiriyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox1.ReadOnly = <span<br />
  style=color:blue>True</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>### NAVİGASYON BUTONLARI<br />
  ###</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button1_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button1.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>İlk kayıda<br />
  gidiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            = <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position.MinValue</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button2_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button2.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Bir önceki<br />
  kayıda gidiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position -= 1</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button3_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button3.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Bir sonraki<br />
  kayıda gidiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position += 1</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button4_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button4.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Son kayıda<br />
  gidiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            = <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position.MaxValue</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>### GÜNCELLE ###</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button5_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button5.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataTable<br />
  içinde farklı bir satıra giderek yapılan</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>değişikliği<br />
  geçerli hale getiriyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>If</span> <span<br />
  style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position = 0 <span style=color:blue>Then</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position -= 1</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Else</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position -= 1</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position += 1</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>End</span> <span<br />
  style=color:blue>If</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataAdapter<br />
  nesnesinin Update metodunu kullanarak</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>local verileri<br />
  veri kaynağı ile güncelliyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.Update(das1, &quot;Shippers&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>### TEMİZLE VE YENİ<br />
  KAYIT EKLE ###</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:green>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button6_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button6.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Eklenen satırı<br />
  daha sonradan güncelleyebilmek için</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>İlk satıra<br />
  gidiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            = <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position.MinValue</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Metin kutuları<br />
  için gerçekleştirdiğimiz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>veri<br />
  bağlantılarını kaldırıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox1.DataBindings.Clear()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox2.DataBindings.Clear()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox3.DataBindings.Clear()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Metin<br />
  kutularını temizliyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox1.Text = &quot;&quot;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox2.Text = &quot;&quot;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox3.Text = &quot;&quot;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Artık<br />
  uygulamamız yeni veri girişi için hazır durumda</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button7_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button7.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Shippers<br />
  DataTableında yeni bir DataRow oluşturuyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>ve değerlerini<br />
  form üzerindeki metin kutularından alıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span> newRow<br />
  <span style=color:blue>As</span> DataRow =<br />
  das1.Tables(&quot;Shippers&quot;).NewRow()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        newRow(&quot;CompanyName&quot;) =<br />
  TextBox2.Text</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        newRow(&quot;Phone&quot;) = TextBox3.Text</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">       <br />
  das1.Tables(&quot;Shippers&quot;).Rows.Add(newRow)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Eklenen satırı<br />
  veri kaynağında geçerli hale getirmek için</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataAdapter<br />
  nesnesinin Update metodunu kullanıyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.Update(das1, &quot;Shippers&quot;)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Metin<br />
  kutularından kaldırdığımız veri bağlantılarını </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>yeniden<br />
  oluşturuyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox1.DataBindings.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">           (<span style=color:blue>New</span><br />
  Binding(&quot;Text&quot;, das1, &quot;Shippers.ShipperID&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox2.DataBindings.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">           (<span style=color:blue>New</span><br />
  Binding(&quot;Text&quot;, das1, &quot;Shippers.CompanyName&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        TextBox3.DataBindings.Add _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">           (<span style=color:blue>New</span><br />
  Binding(&quot;Text&quot;, das1, &quot;Shippers.Phone&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Eklenen son<br />
  satırı görüntülemek için DataSet içindeki </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Shippers<br />
  DataTableının son satırına gidiyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            = <span style=color:blue>Me</span>.BindingContext(das1,<br />
  &quot;Shippers&quot;).Position.MaxValue</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>End</span> <span<br />
  style=color:blue>Sub</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New";color:blue>&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:green>### SİL ###</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">    <span style=color:blue>Private</span> <span<br />
  style=color:blue>Sub</span> Button8_Click(<span style=color:blue>ByVal</span><br />
  sender <span style=color:blue>As</span> System.Object, <span<br />
  style=color:blue>ByVal</span> e <span style=color:blue>As</span><br />
  System.EventArgs) <span style=color:blue>Handles</span> Button8.Click</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataSet<br />
  içindeki Shippers tablosuna </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>dayanan bir<br />
  DataView oluşturuyoruz ve </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>şu anda<br />
  bulunulan ShipperID ile eşleşen </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>row indexini<br />
  buluyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span> dav1 <span<br />
  style=color:blue>As</span> DataView = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">            <span style=color:blue>New</span><br />
  DataView(das1.Tables(&quot;Shippers&quot;))</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dav1.Sort = &quot;ShipperID&quot;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:blue>Dim</span><br />
  rowIndex <span style=color:blue>As</span> <span style=color:blue>Integer</span><br />
  = _</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dav1.Find(TextBox1.Text)</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>Bulunan satırı<br />
  silinmek üzere işaretliyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">       <br />
  das1.Tables(&quot;Shippers&quot;).Rows(rowIndex).Delete()</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">&nbsp;</span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>DataAdapter<br />
  nesnesinin Update metodunu kullanarak</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>yaptığımız<br />
  işlemi SQL Server üzerinde ve DataSet </span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        <span style=color:green>üzerindeki<br />
  Shippers tablosunda geçerli hale getiriyoruz</span></span></p>
<p  style=text-autospace:none><span style=font-size:10.0pt;<br />
  font-family:"Courier New">        dap1.Update(das1, &quot;Shippers&quot;)</span></p>
<pre>    <span style=color:blue>End</span> <span style=color:blue>Sub</span></pre>
</td>
</tr>
</table>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Uygulamamız<br />
çalışırken aşağıdaki gibi görünecektir..</span></p>
<p  align=center style=text-align:center><span<br />
style=font-size:10.0pt;font-family:Verdana><img width=370 height=321<br />
src="http://www.yazgelistir.com/images/kadir/adonet/image015.jpg"></span></p>
<p  align=center style=text-align:center><b><span<br />
style=font-size:10.0pt;font-family:Verdana>Şekil 5:2  Uygulamamız Çalışıyor</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>Kaynaklar:&#8230;&#8230;&#8230;&#8230;&#8230;.</span></b></p>
<p  style=margin-left:54.0pt;text-indent:-36.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>i.<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>MSDN </span><span<br />
style=font-size:10.0pt;font-family:Wingdings>J</span></p>
<p  style=margin-left:54.0pt;text-indent:-36.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>ii.<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>Kitaplar</span></p>
<p  style=margin-left:54.0pt;text-indent:-36.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>iii.<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>Google</span></p>
<p  style=margin-left:54.0pt;text-indent:-36.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>iv.<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>Ben</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Dokumanı<br />
yukarıdaki kaynaklardan derlediğim bilgilerle oluşturdum. Farklı kaynaklarda<br />
bulunan dokumanların derlemesi olarak görebiliriz, tabi bir artısı da Türkçe olması.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Faydalı<br />
olacağını umuyorum.</span></p>
<p></span></td>
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/microsoft-visual-basic-net-ve-ado-net-ile-sql-server-islemleri-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ADO .NET 2.0 İle Gelen Yenilikler -4</title>
		<link>http://www.systemdoktoru.com/2010/04/ado-net-2-0-ile-gelen-yenilikler-4/</link>
		<comments>http://www.systemdoktoru.com/2010/04/ado-net-2-0-ile-gelen-yenilikler-4/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

		<guid isPermaLink="false">http://www.systemdoktoru.com/?p=71</guid>
		<description><![CDATA[ADO .NET 2.0 İle
					Gelen Yenilikler -4
		Dataset &#38;
					DataTable Sınıflarına&#160;İlişkin Temel Değişiklikler
		
		
				Dataset &#38; Binary Serialization
				Özellikle kurumsal ölçekte yazılan ve çok katmanlı mimarilerin
						kullanıldığı uygulamalarda, katmanlar arasındaki veri iletişiminin son derece
						efektif olması istenir. Veri iletişiminde efektiflik,&#160;hem iletişim
						hızı&#160;hem de iletilen veri boyutunun makul sınırlar içinde olmasıdır.
						Programcıların iletişim hızı ya da band genişliği gibi argümanlar üzerinde çok
						da fazla inisiyatifleri olamayacağı gerçeği [...]]]></description>
			<content:encoded><![CDATA[<p>ADO .NET 2.0 İle<br />
					Gelen Yenilikler -4</STRONG></FONT></P><br />
		<P align="center"><FONT face="Verdana" color="#660000" size="4"><STRONG>Dataset &amp;<br />
					DataTable Sınıflarına&nbsp;İlişkin Temel Değişiklikler</STRONG></FONT></P><br />
		<HR width="100%" SIZE="1"><br />
		<P><FONT face="Verdana"><br />
				<P align="center"><STRONG><FONT color="#660000">Dataset &amp; Binary Serialization</FONT></STRONG></P><br />
				<P><FONT size="2">Özellikle kurumsal ölçekte yazılan ve çok katmanlı mimarilerin<br />
						kullanıldığı uygulamalarda, katmanlar arasındaki veri iletişiminin son derece<br />
						efektif olması istenir. Veri iletişiminde efektiflik,&nbsp;hem iletişim<br />
						hızı&nbsp;hem de iletilen veri boyutunun makul sınırlar içinde olmasıdır.<br />
						Programcıların iletişim hızı ya da band genişliği gibi argümanlar üzerinde çok<br />
						da fazla inisiyatifleri olamayacağı gerçeği göz önüne alındığında, programcının<br />
						efektiflik adına fark yaratabileceği tek argüman; veri boyutunun<br />
						sınırlandırılmasıdır. </FONT><br />
				<P><FONT size="2">Konuya .NET perspektifinden bakılırsa, iletilmek istenen verinin<br />
						DataSet olması durumunda, programcının veri boyutları üzerinde de yapabileceği<br />
						fazla birşey kalmadığı görülecektir. Bu durum özellikle&nbsp;Remoting konusunda<br />
						daha da dramatik sonuçlara neden olmaktadır. Zira bir DataSetin içeriği,<br />
						binary serialization işlemine&nbsp;tabi tutulsa dahi kaçınılmaz olarak veri<br />
						yine XML formatında ifade edilmektedir.&nbsp;Sonuçta bu durum, verinin<br />
						boyutlarında (yaklaşık)&nbsp;üç katlık bir artışa neden<br />
						olmaktadır.&nbsp;&nbsp;&nbsp;</FONT><br />
				<P><FONT size="2">DataSetin başından beri eleştirilen bu olumsuzluk, ADO.NET 2.0<br />
						da&nbsp;sınıfa eklenen <STRONG>RemotingFormat</STRONG> isimli bir property<br />
						sayesinde bertaraf edilmiştir.&nbsp;Böylece DataSet üzerinde gerçek anlamda<br />
						binary serialization yapabilmek mümkün hale gelmiştir.<br />
						<BR><br />
						Bu property <STRONG>SerializationFormat enumı</STRONG> türünde sabit değerleri<br />
						alabilmektedir. Bu enumın sayımladığı sabit değerleri şöyledir :</FONT><br />
					<UL><br />
						<LI><br />
							<FONT size="2">SerializationFormat.XML (default)</FONT></LI><br />
						<LI><br />
							<FONT size="2">SerializationFormat.Binary </FONT><br />
						</LI><br />
					</UL><br />
				<P><FONT color="#660000" size="2"><STRONG>Örnek : </STRONG><FONT color="#000000">Aşağıdaki<br />
							uygulamada veri tabanından alınan kayıtlarla doldurulan bir DataSet, binary<br />
							serialization işlemine tabi tutulmaktadır. RemotingFormat propertysine<br />
							SerializationFormat.Binary değeri atanarak uygulama çalıştırıldığında elde<br />
							edilen dosya büyüklüğü yaklaşık 139 KB iken, SerializationFormat.Xml değeri<br />
							atanarak çalıştırıldığında elde edilen dosya büyüklüğü yaklaşık&nbsp;453<br />
							KB&nbsp;olduğu gözlenmiştir.&nbsp;&nbsp;</FONT></FONT><br />
				<P><FONT size="2">Remoting performansı hakkında ise, (1000 kaydın üzerinde)<br />
						SerializationFormat.Binary değeri&nbsp;kullanıldığında, yaklaşık 80 katlık bir<br />
						artıştan söz edilebilir.&nbsp;&nbsp;&nbsp;&nbsp;</FONT><br />
				<P><FONT face="Courier New" size="2">static void Main(string[] args)<br />
						<BR><br />
						{<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; </FONT><FONT face="Courier New" size="2">SqlConnection cnn =<br />
						new SqlConnection(&#8220;data source=localhost; initial catalog=Northwind; integrated<br />
						security=sspi&#8221;);<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; SqlCommand cmd = new SqlCommand(&#8220;Select * From Orders&#8221;,<br />
						cnn);<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; SqlDataAdapter adp = new SqlDataAdapter(cmd);<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; DataSet ds = new DataSet();<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; adp.Fill(ds);<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; cnn.Close(); </FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">&nbsp;&nbsp;&nbsp; // serialization işlemi</FONT></P><br />
				<P><FONT face="Courier New"><FONT size="2">&nbsp;&nbsp;&nbsp; BinaryFormatter format = new<br />
							BinaryFormatter();<br />
							<BR><br />
							&nbsp;&nbsp;&nbsp; FileStream fs = new FileStream(&#8220;c:\sar.bin&#8221;,<br />
							FileMode.CreateNew);&nbsp;<BR><br />
							&nbsp;&nbsp;&nbsp;&nbsp;<BR><br />
						</FONT><FONT size="2">&nbsp;&nbsp;&nbsp; ds.RemotingFormat =<br />
							SerializationFormat.Binary; </FONT></FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">&nbsp;&nbsp;&nbsp; format.Serialize(fs, ds);<br />
						<BR><br />
						}</FONT></P><br />
				<STRONG><FONT color="#660000"><br />
						<HR width="100%" SIZE="1"><br />
					</FONT></STRONG><br />
				<P align="center"><STRONG><FONT color="#660000">Dataset &#8211; DataReader Entegrasyonu</FONT></STRONG><br />
				<P><FONT size="2">Çalışma şekilleri açısından, birbirlerinden tümüyle farklı<br />
						iki&nbsp;paradigmanın temsilcisi durumunda olan&nbsp;bu sınıflar, (izole<br />
						tasarımları nedeniyle) içerdikleri verilerin&nbsp;kendi aralarındaki<br />
						transferine imkan sağlamamaktaydı.&nbsp;Oysa</FONT><FONT size="2"> söz konsusu<br />
						sınıflara ADO.NET 2.0 da yapılan eklentiler, birbirlerinden çok farklı iki<br />
						yaklaşımı öngören bu sınıfların entegrasyonunu mümkün kılmıştır. </FONT><br />
				</P><br />
				<P><FONT size="2">Dataset ve DataTable sınıflarına eklenen Load() isimli üye fonksiyon;<br />
						parametresine aldığı IDataReader referansının temsil ettiği bellek bölgesindeki<br />
						kayıtların, Dataset ya da DataTable içerisine aktarımını sağlar.</FONT></P><br />
				<P><FONT color="#000099" size="2">public void Load(IDataReader reader, LoadOption<br />
						loadOption, DataTable[] tables); </FONT><br />
				</P><br />
				<P><FONT size="2"><STRONG><FONT color="#660000">Örnek :</FONT></STRONG> </FONT><br />
				</P><br />
				<P><FONT size="2"><FONT face="Courier New">SqlConnection cnn = new <FONT size="2">SqlConnection(&#8220;data<br />
								source=localhost; initial catalog=Northwind;<br />
								<BR><br />
								integrated security=sspi&#8221;);</FONT></FONT></FONT></P><br />
				<P><FONT face="Courier New" size="2">SqlCommand cmd = new SqlCommand(&#8220;Select * From<br />
						Employees&#8221;, cnn);</FONT></P><br />
				<P><FONT face="Courier New" size="2">SqlDataReader dr = cmd.ExecuteReader();</FONT></P><br />
				<P><FONT face="Courier New" size="2">Dataset ds = new Dataset();</FONT></P><br />
				<P><FONT face="Courier New" size="2">ds.Load(dr);</FONT></P><br />
				<P align="center"><FONT color="#660000"><STRONG>DataTableReader Sınıfı</STRONG></FONT></P><br />
				<P><FONT size="2">Kütüphaneye yeni eklenen bu somut sınıf, bellekteki bir (veya daha<br />
						fazla)&nbsp;DataTable nesnesi içerisinde var olan kayıtları, üzerinde salt ve<br />
						ileri yönde okuma&nbsp;yapılabilen bir kayıt seti biçiminde elde etmeyi<br />
						sağlamaktadır.&nbsp;Tanımdan da anlaşılacağı gibi bu sınıfın çalışma<br />
						mekanizması ve içsel tasarımı, DataReaderı andırmaktadır.&nbsp;Zaten söz<br />
						konusu sınıf DbDataReader isimli taban sınıftan türetilmiştir.</FONT></P><br />
				<P><FONT size="2"><STRONG><FONT color="#660000">Örnek :&nbsp;</FONT></STRONG>&nbsp;&nbsp;</FONT></P><br />
				<P><FONT face="Courier New" size="2">SqlConnection cnn = new SqlConnection(&#8220;data<br />
						source=localhost; initial catalog=Northwind;<br />
						<BR><br />
						integrated security=sspi&#8221;); </FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">SqlCommand cmd = new SqlCommand(&#8220;Select<br />
						EmployeeID, LastName, FirstName From Employees&#8221;, cnn); </FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">SqlDataAdapter adp = new SqlDataAdapter(cmd); </FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">DataSet ds = new DataSet();</FONT></P><br />
				<P><FONT face="Courier New" size="2">adp.Fill(ds); </FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">cnn.Close();&nbsp;&nbsp;</FONT></P><br />
				<P><FONT face="Courier New" size="2">DataTableReader dtr = new<br />
						DataTableReader(ds.Tables[0]); </FONT><br />
				</P><br />
				<P><FONT face="Courier New" size="2">while (dtr.Read())<br />
						<BR><br />
						{<br />
						<BR><br />
						&nbsp;&nbsp;&nbsp; listBox1.Items.Add(dtr[0].ToString() + &#8221; &#8221; +<br />
						dtr[1].ToString());<br />
						<BR><br />
						}</FONT></P><br />
				<P><FONT size="2"><STRONG><FONT color="#660000">Not : </FONT></STRONG>Örnekte<br />
						DataTableReader nesnesinin yaratılışı için, sınıfın başlangıç<br />
						fonksiyonuna&nbsp;(constructorına) parametre olarak, üzerinden okuma yapılacak<br />
						DataTable nesnesinin referansının geçildiği görülmektedir.&nbsp;Bu işlem<br />
						DataTableReader ile DataTable ın ilişkilendirilmesini sağlamaktadır. Ancak<br />
						nesnenin yaratılışı için alternatif olarak, DataSet ya da<br />
						DataTable&nbsp;sınıflarına ait GetDataReader() isimli fonksiyon da<br />
						kullanılabilir. Zira bu fonksiyon, DataTableReader sınıfı türünde bir nesne<br />
						referansı döndürmektedir.&nbsp;Bu bağlamda&nbsp;aynı işlem aşağıdaki gibi de<br />
						yapılabilirdi :</FONT></P><br />
				<P><FONT face="Courier New" size="2">DataTableReader dtr =<br />
						ds.Tables[0].GetDataReader();</FONT></P><br />
				<P align="center"><br />
					<HR width="100%" SIZE="1"><br />
				</P><br />
				<P align="left"><br />
					<STRONG><FONT color="#660000">Aykut TAŞDELEN</FONT></STRONG><br />
			</FONT><br />
		</P><br />
		<P></P><br />
		<P></P><br />
		<P><FONT face="Verdana" size="2">VB.NET&nbsp; MVP (MS Most Valuable Professional)</FONT></P></span></td>
</tr>
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/ado-net-2-0-ile-gelen-yenilikler-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server ve Sayfalama</title>
		<link>http://www.systemdoktoru.com/2010/04/sql-server-ve-sayfalama/</link>
		<comments>http://www.systemdoktoru.com/2010/04/sql-server-ve-sayfalama/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

		<guid isPermaLink="false">http://www.systemdoktoru.com/?p=70</guid>
		<description><![CDATA[SQL Server ve Sayfalama
			SQL Serverda pek çok
						sayfalama yöntemi mevcuttur. Fakat bu işlem için kod yazmak gereklidir. Aklıma
						gelen alternatifler;
			
				
					Sorguyu yapıp, tüm sonuç setini istemciye gönderip,
						istemci (client) tarafında, sayfalama yapmak;
				
				Sorguyu SQL Server tarafında yapıp, sonuç setini &#34;temp&#34; databaseine atıp,
				orada sayfalama yapmak
				
				SQL Server tarafında sorgulama yapıp, sadece ihtiyaç duyulan kayıtların
				gönderileceği şekilde sayfalama yapmak.
				
					&#8230;
			Bu yöntemlerin hepsinin kendine göre avantajları [...]]]></description>
			<content:encoded><![CDATA[<p>SQL Server ve Sayfalama</FONT></B></P><br />
			<P><FONT face="Tahoma" size="2"><FONT face="Tahoma" size="2">SQL Serverda pek çok<br />
						sayfalama yöntemi mevcuttur. Fakat bu işlem için kod yazmak gereklidir. Aklıma<br />
						gelen alternatifler;</FONT></P><br />
			<OL><br />
				<LI><br />
					<FONT face="Tahoma" size="2">Sorguyu yapıp, tüm sonuç setini istemciye gönderip,<br />
						istemci (client) tarafında, sayfalama yapmak;</FONT><br />
				<LI><br />
				Sorguyu SQL Server tarafında yapıp, sonuç setini &quot;temp&quot; databaseine atıp,<br />
				orada sayfalama yapmak<br />
				<LI><br />
				SQL Server tarafında sorgulama yapıp, sadece ihtiyaç duyulan kayıtların<br />
				gönderileceği şekilde sayfalama yapmak.<br />
				<LI><br />
					&#8230;</LI></OL><br />
			<P>Bu yöntemlerin hepsinin kendine göre avantajları ve dezavantajları var. Yapılan<br />
				sorgulamadaki optimizasyon, Cacheleme ihtiyacı, problemlere göre değişik<br />
				yöntem seçilmesini gerektiriyor. Örneğin en çok kullanılan ve&nbsp;.Nette<br />
				programlaması kolay olan,&nbsp;birinci yöntem, (bana göre &#8211; veriyi<br />
				cachelemediğiniz sürece &#8211; ) Web tarafında pek kullanışlı değil ama Windows<br />
				uygulamaları için kullanışlı. Çok fazla kayıt olması durumunda, bir &quot;Cache&quot;<br />
				mekanizması implement edilmemişse, her requestte yeniden tüm sonuç setinin,<br />
				SQL serverdan Web Servera taşınmasına sebep olur. İkinci yöntemde temp<br />
				databaseine erişmeniz gerekir. Bu yazıda, ben 3. yöntemi biraz incelemek<br />
				istiyorum.</P><br />
			<P>Öyle bir sorgulama yapmalıyım ki; bir kaç parametre vererek, milyonlarca kayıt<br />
				olan bir sorguda, sadece istediğim sayfadaki, kayıtlar geri dönsün ve SQL<br />
				serverdan Web servera taşınsın. Bütün bu işlemleri de ölçeklenebilir ve hızlı<br />
				bir şekilde yapsın. Bunun için, bir &quot;stored&nbsp;procedure&quot; yazdım. Her ne<br />
				kadar kaçınılması tavsiye edilse de, yarattığım stored procedure, içinde<br />
				dinamik bir SQL ifadesi oluşturup, çalıştırıyor.</P><br />
			<P>SelectPage adını verdiğim stored procedureun kodunu <A href="#SP">aşağıda</A> bulabilirsiniz.</P><br />
			<P>Burada belirtmek isterim ki; belirli durumlarda, bu yazıda anlatılan uygulamadan<br />
				daha hızlı ve ölçeklenebilir çözümler olabilir.</P><br />
			<P><STRONG>Parametreler</STRONG></P><br />
			<P>Stored procedure çalışmak için 9 adet parametreye ihtiyaç duyuyor (sadece ilk üç<br />
				parametrenin doldurulması yeterlidir);</P><br />
			<UL><br />
				<LI><br />
					<STRONG>strFields</STRONG>: virgülle ayrılmış alan listesi,<br />
				<LI><br />
					<STRONG>strPK</STRONG>: Varsa tablonun &quot;Primary Key&quot;i (Bu değerin olması,<br />
				sorgulamanın sonucunu dramatik bir şekilde artırır),<br />
				<LI><br />
					<STRONG>strTables</STRONG>: Tablo listesi (bu alana Joinler ve Hintler<br />
				yazabilirsiniz.),<br />
				<LI><br />
					<STRONG>intPageNo</STRONG>: İstenen sayfa numarası (varsayılan : 1),<br />
				<LI><br />
					<STRONG>intPageSize</STRONG>: Sayfadaki kayıt sayısı (varsayılan : NULL &#8211;<br />
				tüm kayıtları getirir)&nbsp;,<br />
				<LI><br />
					<STRONG>blnGetRecordCount</STRONG>: Toplam kayıt sayısı da isteniyor mu?<br />
				(varsayılan : 0 &#8211; hayır, eğer 1 ise ikinci bir RecordSette toplam kayıt sayısı<br />
				döndürülür),<br />
				<LI><br />
					<STRONG>strFilter</STRONG>: Sorgunuzun WHERE kısmını buraya yazabilirsiniz<br />
				(varsayılan : NULL &#8211; boş),<br />
				<LI><br />
					<STRONG>strSort</STRONG>: Sıralama değeri (ORDER BY) (varsayılan : NULL &#8211;<br />
				boş),<br />
				<LI><br />
					<STRONG>strGroup</STRONG>: GROUP BY ifadesi (varsayılan : NULL &#8211; boş)</LI></UL><br />
			<P><STRONG>Örnekler, kullanım önerileri&nbsp;</STRONG></P><br />
			<P>Northwind varitabanında çalışmaktadır. Aşağıdaki örnekleri, SQL Query Analyzeri<br />
				çalışıtırıp &quot;Northwind&quot; databaseini seçerek çalıştırabilirsiniz. Örneklerdeki<br />
				değerler, Northwindin ilk kurulumdaki verileri kullanılarak gösterilmiştir.<br />
				(SelectPage prosedürünü çağırabilmek için, önce &quot;Northwind&quot; veritabanında, bu<br />
				prosedürü yaratmalısınız.)</P><br />
			<UL><br />
				<LI><br />
					<FONT style="BACKGROUND-COLOR: gainsboro" face="Courier New">exec <STRONG>SelectPage</STRONG><br />
						*, EmployeeID, Employees<BR><br />
					</FONT>Bu sorgu Emploeeys tablosundaki bütün kayıtları getirir.&nbsp;<BR><br />
					&quot;<FONT face="Courier New">SELECT * FROM Employees</FONT>&quot; ifadesine eşittir.<BR><br />
					<BR><br />
				<LI><br />
					<FONT face="Courier New"><FONT style="BACKGROUND-COLOR: gainsboro">exec <STRONG>SelectPage</STRONG><br />
							FirstName+ +LastName, EmployeeID, Employees, 2, 2, 1,<br />
							TitleOfCourtesy&lt;&gt;Dr., LastName</FONT><BR><br />
						<BR><br />
						<FONT face="Tahoma">Bu sorgu; Employeelerin ad ve soyadını, Doktor Dr.<br />
							olmayanları, Soyadına göre sıralayarak,&nbsp;2. sayfadaki 2 kayıtı listeler,<br />
							ayrı bir sonuç setinde de toplam kayıt sayısını döndürür.<BR><br />
							<BR><br />
							İlk kayıt setinde;<BR><br />
						</FONT><br />
<blockquote>Nancy Davolio<BR><br />
							Anne Dodsworth</p></blockquote>
<p></FONT>İkinci kayıt setinde ise, <FONT face="Courier New"><br />
						&quot;8&quot;</FONT> değerini döndürür.<BR><br />
					<br />
				<LI><br />
					Üçüncü ve son örnekte, Northwind veritabanında, &quot;Invoices&quot; adlı bir View<br />
					bulunmaktadır,<BR><br />
					<PRE><FONT style="BACKGROUND-COLOR: gainsboro" face="Courier New" size=2>SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShipRegion, Orders.ShipPostalCode,
	Orders.ShipCountry, Orders.CustomerID, Customers.CompanyName AS CustomerName, Customers.Address, Customers.City,
	Customers.Region, Customers.PostalCode, Customers.Country,
	(FirstName +   + LastName) AS Salesperson,
	Orders.OrderID, Orders.OrderDate, Orders.RequiredDate, Orders.ShippedDate, Shippers.CompanyName As ShipperName,
	&quot;Order Details&quot;.ProductID, Products.ProductName, &quot;Order Details&quot;.UnitPrice, &quot;Order Details&quot;.Quantity,
	&quot;Order Details&quot;.Discount,
	(CONVERT(money,(&quot;Order Details&quot;.UnitPrice*Quantity*(1-Discount)/100))*100) AS ExtendedPrice, Orders.Freight
FROM 	Shippers INNER JOIN
		(Products INNER JOIN
			(
				(Employees INNER JOIN
					(Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID)
				ON Employees.EmployeeID = Orders.EmployeeID)
			INNER JOIN &quot;Order Details&quot; ON Orders.OrderID = &quot;Order Details&quot;.OrderID)
		ON Products.ProductID = &quot;Order Details&quot;.ProductID)
	ON Shippers.ShipperID = Orders.ShipVia
</FONT></pre><br />
				</LI><br />
			</UL><br />
			<FONT face="Tahoma"><BLOCKQUOTE><br />
					<P>Bu sorguyu çalıştırdığınızda 2155 kayıt geri gönderiyor. Böyle bir sorguda 10<br />
						kayıttan oluşan 3. sayfayı&nbsp;göstermek istediğimizde;</P><br />
					<P><PRE><FONT style="BACKGROUND-COLOR: gainsboro" face="Courier New" size=2>exec <STRONG>Selectpage</STRONG> Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShipRegion, Orders.ShipPostalCode,
	Orders.ShipCountry, Orders.CustomerID, Customers.CompanyName AS CustomerName, Customers.Address, Customers.City,
	Customers.Region, Customers.PostalCode, Customers.Country,
	(FirstName +   + LastName) AS Salesperson,
	Orders.OrderID, Orders.OrderDate, Orders.RequiredDate, Orders.ShippedDate, Shippers.CompanyName As ShipperName,
	&quot;Order Details&quot;.ProductID, Products.ProductName, &quot;Order Details&quot;.UnitPrice, &quot;Order Details&quot;.Quantity,
	&quot;Order Details&quot;.Discount,
	(CONVERT(money,(&quot;Order Details&quot;.UnitPrice*Quantity*(1-Discount)/100))*100) AS ExtendedPrice, Orders.Freight,
Orders.OrderID,
Shippers(nolock) INNER JOIN
		(Products(nolock) INNER JOIN
			(
				(Employees(nolock) INNER JOIN
					(Customers(nolock) INNER JOIN Orders(nolock) ON Customers.CustomerID = Orders.CustomerID)
				ON Employees.EmployeeID = Orders.EmployeeID)
			INNER JOIN &quot;Order Details&quot; ON Orders.OrderID = &quot;Order Details&quot;.OrderID)
		ON Products.ProductID = &quot;Order Details&quot;.ProductID)
	ON Shippers.ShipperID = Orders.ShipVia,
3, 10, 1

</FONT></pre><br />
					<P>şeklinde bir sorgu yazmak yeterli olacaktır.<BR><br />
					</P><br />
				</BLOCKQUOTE></FONT><br />
			<UL><br />
				<LI><br />
					<FONT face="Courier New"><FONT face="Tahoma">Gruplama özelliği için,<BR><br />
						</FONT><br />
						<BR><br />
						<FONT style="BACKGROUND-COLOR: gainsboro">exec <STRONG>SelectPage</STRONG> ProductName,<br />
							Sum(ExtendedPrice) AS &quot;Total&quot;, ProductName, Invoices, 2, 10, 0, null,<br />
							null, ProductName<BR><br />
							<BR><br />
						</FONT></FONT><FONT face="Tahoma">şeklinde bir sorgu yazmak yeterli olacaktır.<BR><br />
						<BR><br />
					</FONT><br />
				<LI><br />
					Genelde ben bu prosedürü uygulamada direk kullanmıyorum, bu prosedürü çağıran<br />
					prosedürler yazıyorum. Örneğin müşterileri sayfalamak istediğimde;<br />
					&quot;GetCustomersByPage&quot; gibi bir prosedür yazıyorum;<BR><br />
					<BR></p>
<pre><FONT style="BACKGROUND-COLOR: gainsboro" size="2" face="Courier New">CREATE PROCEDURE GetCustomersByPage (@PageNo INT, @PageSize INT) AS
	EXEC SelectPage *, CustomerID, Customers (nolock), @PageNo, @PageSize, 1
RETURN<BR><BR></FONT></pre>
<p>				</LI><br />
			</UL><br />
			<P><STRONG><A name="SP">Stored Procedure</A></STRONG></P><br />
			<P><PRE style="PADDING-LEFT: 20px"><FONT size=2><FONT color=blue>CREATE PROCEDURE</FONT> SelectPage (
	@strFields <FONT color=blue><FONT color=blue>VARCHAR</FONT></FONT>(4000),
	@strPK <FONT color=blue>VARCHAR</FONT>(100),
	@strTables <FONT color=blue>VARCHAR</FONT>(4000),
	@intPageNo <FONT color=blue>INT</FONT> = 1,
	@intPageSize <FONT color=blue>INT</FONT> = NULL,
	@blnGetRecordCount <FONT color=blue>BIT</FONT> = 0,
	@strFilter <FONT color=blue>VARCHAR</FONT>(8000) = NULL,
	@strSort <FONT color=blue>VARCHAR</FONT>(8000) = NULL,
	@strGroup <FONT color=blue>VARCHAR</FONT>(8000) = NULL
)  <FONT color=blue>AS</FONT> 

	<FONT color=blue><FONT color=#000000>    </FONT>DECLARE</FONT> @blnBringAllRecords BIT
    <FONT color=blue>DECLARE</FONT> @strPageNo <FONT color=blue>VARCHAR</FONT>(50)
    <FONT color=blue>DECLARE</FONT> @strPageSize <FONT color=blue>VARCHAR</FONT>(50)
    <FONT color=blue>DECLARE</FONT> @strSkippedRows <FONT color=blue>VARCHAR</FONT>(50)

    <FONT color=blue>DECLARE</FONT> @strFilterCriteria <FONT color=blue>VARCHAR</FONT>(8000)
    <FONT color=blue>DECLARE</FONT> @strSimpleFilter <FONT color=blue>VARCHAR</FONT>(8000)
    <FONT color=blue>DECLARE</FONT> @strSortCriteria <FONT color=blue>VARCHAR</FONT>(8000)
    <FONT color=blue>DECLARE</FONT> @strGroupCriteria <FONT color=blue>VARCHAR</FONT>(8000)

    <FONT color=blue>DECLARE</FONT> @intRecordcount <FONT color=blue>INT</FONT>
    <FONT color=blue>DECLARE</FONT> @intPagecount <FONT color=blue>INT</FONT>   

<FONT color=blue><FONT color=#000000>    </FONT>SET NOCOUNT ON</FONT>  

    <FONT color=blue>IF</FONT> @intPageNo &lt; 1 <FONT color=blue>SET</FONT> @intPageNo = 1
    <FONT color=blue>SET</FONT> @strPageNo = <FONT color=blue>CONVERT</FONT>(<FONT color=blue>VARCHAR</FONT>(50), @intPageNo)
    <FONT color=blue>IF</FONT> @intPageSize <FONT color=blue>IS NULL OR</FONT>     @intPageSize &lt; 1
		<FONT color=blue>SET</FONT> @blnBringAllRecords = 1
    <FONT color=blue>ELSE</FONT> <FONT color=blue>BEGIN</FONT>
        <FONT color=blue>SET</FONT> @blnBringAllRecords = 0
        <FONT color=blue>SET</FONT> @strPageSize = <FONT color=blue>CONVERT</FONT>(<FONT color=blue>VARCHAR</FONT>(50), @intPageSize)
        <FONT color=blue>SET</FONT> @strPageNo =  <FONT color=blue>CONVERT</FONT>(<FONT color=blue>VARCHAR</FONT>(50), @intPageNo)
        <FONT color=blue>SET</FONT> @strSkippedRows = <FONT color=blue>CONVERT</FONT>(<FONT color=blue>VARCHAR</FONT>(50), @intPageSize * (@intPageNo &#8211; 1))
    <FONT color=blue>END</FONT>

    <FONT color=blue>IF</FONT> @strFilter <FONT color=blue>IS NOT NULL AND</FONT>      @strFilter !=   <FONT color=blue>BEGIN</FONT>
        <FONT color=blue>SET</FONT> @strFilterCriteria =  <FONT color=black>WHERE</FONT>  + @strFilter +
        <FONT color=blue>SET</FONT> @strSimpleFilter =  AND  + @strFilter +
    <FONT color=blue>END</FONT> <FONT color=blue>ELSE</FONT> <FONT color=blue>BEGIN</FONT>
        <FONT color=blue>SET</FONT> @strSimpleFilter =
        <FONT color=blue>SET</FONT> @strFilterCriteria =
    <FONT color=blue>END</FONT>

    <FONT color=blue>IF</FONT> @strSort <FONT color=blue>IS NOT NULL AND</FONT>      @strSort !=
        <FONT color=blue>SET</FONT> @strSortCriteria =  ORDER BY  + @strSort +
    <FONT color=blue>ELSE</FONT>
        <FONT color=blue>SET</FONT> @strSortCriteria = 

    <FONT color=blue>IF</FONT> @strGroup <FONT color=blue>IS NOT NULL AND</FONT>      @strGroup !=
        <FONT color=blue>SET</FONT> @strGroupCriteria =  GROUP BY  + @strGroup +
    <FONT color=blue>ELSE</FONT>
        <FONT color=blue>SET</FONT> @strGroupCriteria = 

    <FONT color=blue>IF</FONT> @blnBringAllRecords = 1 <FONT color=blue>BEGIN</FONT>
        <FONT color=blue>EXEC</FONT> (SELECT  + @strFields +  FROM  + @strTables + @strFilterCriteria + @strGroupCriteria + @strSortCriteria)
    <FONT color=blue>END</FONT> <FONT color=blue>ELSE</FONT> <FONT color=blue>BEGIN</FONT>
        <FONT color=blue>IF</FONT> @intPageNo = 1
            <FONT color=blue>EXEC</FONT> (SELECT TOP  + @strPageSize +   + @strFields +  FROM  + @strTables + @strFilterCriteria + @strGroupCriteria + @strSortCriteria)
        <FONT color=blue>ELSE</FONT> <FONT color=blue>BEGIN</FONT>
            <FONT color=blue>EXEC</FONT> (SELECT  + @strFields +  FROM  + @strTables +  <FONT color=blue>WHERE</FONT>  + @strPK +  IN  +
                (SELECT TOP  + @strPageSize +   + @strPK +  FROM  + @strTables +
                     <FONT color=blue>WHERE</FONT>  + @strPK +  NOT IN  +
                        (SELECT TOP  + @strSkippedRows +   + @strPK +  FROM  + @strTables + @strFilterCriteria + @strGroupCriteria + @strSortCriteria + )  +
                    @strSimpleFilter +
                    @strGroupCriteria +
                    @strSortCriteria + )  +
                @strGroupCriteria +
                @strSortCriteria
            )
        <FONT color=blue>END</FONT>
    <FONT color=blue>END</FONT>
    <FONT color=blue>IF</FONT> @blnGetRecordCount = 1
        <FONT color=blue>IF</FONT> @strGroupCriteria !=
	        <FONT color=blue>EXEC</FONT> (SELECT COUNT(*) AS RECORDCOUNT FROM (SELECT COUNT(*) FROM  + @strTables + @strFilterCriteria + @strGroupCriteria + ) AS tbl (id))
        <FONT color=blue>ELSE</FONT>
            <FONT color=blue>EXEC</FONT> (SELECT COUNT(*) AS RECORDCOUNT FROM  + @strTables + @strFilterCriteria + @strGroupCriteria)

</FONT></pre><br />
			<P></P><br />
			<P><FONT face="Tahoma" size="2">Mert Sakarya<BR><br />
					Uygulama Mimarı<BR><br />
					<A href="mailto:mertsakarya@hotmail.com">mertsakarya@hotmail.com</A><br />
					<BR><br />
					Doğan Online A.Ş.</FONT></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/sql-server-ve-sayfalama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Visual Basic.NET ve ADO.NET ile SQL Server İşlemleri / 1</title>
		<link>http://www.systemdoktoru.com/2010/04/microsoft-visual-basic-net-ve-ado-net-ile-sql-server-islemleri-1/</link>
		<comments>http://www.systemdoktoru.com/2010/04/microsoft-visual-basic-net-ve-ado-net-ile-sql-server-islemleri-1/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

		<guid isPermaLink="false">http://www.systemdoktoru.com/?p=69</guid>
		<description><![CDATA[Bu
dokumanda Microsoft .NET altyapısı ile sunulan veri erişim teknolojisi
ADO.NETi detaylı olarak ele alıyor olacağız.. 

Ø&#160;&#160;&#160;&#160;&#160;&#160;
Giriş
Ø&#160;&#160;&#160;&#160;&#160;&#160;
ADO.NET
Nesneleri
Ø&#160;&#160;&#160;&#160;&#160;&#160;
Bağlantı
Oluşturma
Ø&#160;&#160;&#160;&#160;&#160;&#160;
Command ve
DataReader Nesneleri ile Çalışmak
Ø&#160;&#160;&#160;&#160;&#160;&#160;
DataAdapter,
Data Set, Form ve Form Kontrolleri
Ø&#160;&#160;&#160;&#160;&#160;&#160;
Verileri
Düzenlemek, Silmek ve Oluşturmak&#160;
Bu
dokuman beş ana bölümden oluşmaktadır. 
-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
İlk olarak
ADO.NETin yapısı hakkında genel bilgiler veriyor olacağım
-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
Daha sonra SQL
Server veritabanına bağlantı oluşturma ve bu bağlantıyı güvenli hale getirme
konusunu ele alıyor olacağım
-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
Read-Only,
forward-only veri erişimini [...]]]></description>
			<content:encoded><![CDATA[<p>Bu<br />
dokumanda Microsoft .NET altyapısı ile sunulan veri erişim teknolojisi<br />
ADO.NETi detaylı olarak ele alıyor olacağız.. </span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt>
<span<br />
style=font-size:10.0pt;font-family:Wingdings>Ø<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Giriş</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Wingdings>Ø<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>ADO.NET<br />
Nesneleri</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Wingdings>Ø<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Bağlantı<br />
Oluşturma</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Wingdings>Ø<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Command ve<br />
DataReader Nesneleri ile Çalışmak</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Wingdings>Ø<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>DataAdapter,<br />
Data Set, Form ve Form Kontrolleri</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Wingdings>Ø<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Verileri<br />
Düzenlemek, Silmek ve Oluşturmak&nbsp;</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bu<br />
dokuman beş ana bölümden oluşmaktadır. </span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>-<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>İlk olarak<br />
ADO.NETin yapısı hakkında genel bilgiler veriyor olacağım</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>-<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Daha sonra SQL<br />
Server veritabanına bağlantı oluşturma ve bu bağlantıyı güvenli hale getirme<br />
konusunu ele alıyor olacağım</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>-<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Read-Only,<br />
forward-only veri erişimini detaylı olarak ele alarak, bu tür veri erişim<br />
tekniğine dair pek çok örnek geliştireceğiz</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>-<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Sonraki adımda<br />
Windows Form uygulamalarında data set kullanımını ele alıyor olacağız. Windows<br />
Form kontrollerine programatik olarak veri bağlama konusunda pek çok örnek<br />
yapacağız. Aynı zamanda bu bölümde Parent-Child ilişkilerini ele alacağız.</span></p>
<p  style=margin-left:36.0pt;text-indent:-18.0pt><span<br />
style=font-size:10.0pt;font-family:Verdana>-<span style=font:7.0pt "Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span><span style=font-size:10.0pt;font-family:Verdana>Son olarak<br />
Windows Form uygulamalarından SQL Serverda yer alan verilerin düzenlenmesini,<br />
silinmesini ve yeni verilerin eklenmesini ele alıyor olacağız.&nbsp;</span></p>
<p ><b><span style=font-family:Verdana;color:black>1 &#8211; ADO.NET<br />
Nesneleri</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Her ne<br />
kadar ADO.NET varsayılan olarak üç adet data provider sunuyor olsa da ben bu<br />
dokumanda SQL Server 2000 ile ilgili işlemlerde kullanacağımız SQL Server Data<br />
Providerı ele alıyor olacağım. SQL Server Providerı, System.Data.SQLClient<br />
namespacei aracılığıyla kullanabiliriz. SQL Server Providerı ile bize sunulan<br />
ADO.NET nesnelerine erişebilmek için bu namespacei aşağıdaki sözdizimi ile sınıfımıza<br />
(Form, Modul, Class vb) dahil etmemiz gerekiyor;&nbsp;</span></p>
<p ><span style=font-size:10.0pt;font-family:"Courier New";<br />
color:#333399>Imports System.Data.SqlClient</span><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Altı<br />
temel ADO.NET nesne sınıfı vardır. Bu sınıflar; <b>Connection</b>, <b>Command</b>,<br />
<b>DataReader</b>, <b>DataAdapter</b>, <b>DataSet</b> ve DataView sınıflarıdır.<br />
Bu bölümde bu altı sınıfı ve bu sınıfların ADO.NET uygulamalarında sıklıkla<br />
kullanacağınız en önemli özellik ve metodlarına odaklanıyor olacağız. </span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>Connection<br />
Sınıfı</span></b><b><span style=font-size:10.0pt;font-family:Verdana><br />
</span></b><span style=font-size:10.0pt;font-family:Verdana>Connection sınıfı<br />
uygulamanızın bir veri kaynağında yer alan verileri okumasını ve veri kaynağına<br />
ekleme yapabilmesini sağlar. Bu sınıfın SQL Data Provider ile bize sağladığı <b>SqlConnection</b><br />
nesnesini kullanarak sunucuya (sql server) NT veya SQL Server Authentication<br />
mekanizmalarından birini kullanarak bağlanabiliriz. ConnectionString yapısı<br />
ADOda kullandığımız ConnectionStringlere oldukça benzemektedir. Ek olarak<br />
bağlantıyı Open metodu ile açabiliyor, Close metodu ile kapatabiliyoruz. Bağlantı<br />
kurma/kapama esnasında oluşan exceptionları yakalayabiliyor ve gerekli<br />
işlemleri gerçekleştirebiliyoruz. Örneğin veri okunabilen bir backup sunucunuz<br />
varsa, ana sunucuya bağlanılamadığı durumlarda uygulamanızın backup sunucusuna<br />
bağlanarak işlem yapmasını kolayca sağlayabiliyoruz. Uygulamalarımız,<br />
kullandığı Connection nesnelerini işleri bittiğinde mutlaka kapatmalıdırlar. </span></p>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>SqlConnection</span></b><span<br />
style=font-size:10.0pt;font-family:Verdana> nesnesinin <b>ConnectionString </b>özelliği<br />
bağlantı oluşturulurken kullanılacak bağlantı satırını tanımlamanıza olanak<br />
verir.  <b>DataSource</b> özelliği bağlantının kurulacağı SQL Serverı, <b>Database<br />
</b>özelliği <b>SqlConnection</b> nesnesinin erişeceği sunucuda çalışılacak<br />
veritabanını, <b>ConnectionTimeout </b>özelliği uygulamanın SqlServerdan yanıt<br />
gelmesi için ne kadar bekleyeceğini (süre dolduğunda bir exception oluşturulur)<br />
tanımlamanızı sağlar. &nbsp;</span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>Command<br />
Sınıfı</span></b></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Command<br />
sınıfı sunucuya gönderilecek deyimleri barındırır. Bu deyimler, Select<br />
ifadeleri olabilir, data manupulation ifadeleri olabilir veya sunucu üzerinde<br />
yeni nesneler oluşturacak veya varolan nesneler üzerinde değişiklik yapan<br />
ifadeler olabilir. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bu<br />
deyimleri sunucuya göndermek için Sql Server data provider tarafından sunulan <b>SqlCommand</b><br />
nesnesini kullanırız. <b>SqlCommand</b> nesnesinin üç önemli özelliği vardır. Bunlar;<br />
<b>Commandtext</b>, <b>CommandType</b> ve <b>Parameters</b> özellikleridir. <b>CommandText<br />
</b>özelliği T-SQL ifadesini, stored procedure adını veya tablo adını içerir. ADO.NET,<br />
<b>CommandText</b> özelliğini varsayılan olarak T-Sql olarak tanımlamıştır. <b>CommandType</b><br />
özelliği üç değer alabilir: <b>Text</b>, <b>StoredProcedure</b> ve <b>TableDirect</b>.<br />
<b>CommandText </b>özelliğinde bir Stored Procedure adı belirttiğimiz<br />
durumlarda <b>CommandType </b>özelliğini <b>StoredProcedure </b>olarak, bir<br />
veya daha fazla sayıdaki tablodan, tablo(lar)daki tüm sütun ve satırları<br />
alacağımız durumlarda <b>TableDirect</b> belirtiriz. <b>TableDirect</b> ile<br />
birden çok tablo kullanmak istediğimiz durumlarda tablo isimlerini virgül ile<br />
ayırırız.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>SqlCommand<br />
nesnesinin Parameters özelliği bir kolleksiyondur. Parametreler, Stored<br />
Procedureler, diğer veritabanı nesneleri ve T-SQL ifadeleri için dinamik<br />
olarak argumanlar oluşturmakta kullanılır. Özellikle veritabanında veri ekleme<br />
/ güncelleme işlemleri gerçekleştirdiğiniz durumlarda parametreler oldukça<br />
faydalı olacaktır. Parametreleri aynı zamanda Stored Procedurelerden output<br />
parametrelerini almak ve Stored procedurelerden değer döndürmek amacıyla<br />
kullanabilirsiniz.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Command<br />
nesnesi, farklı T-SQL işlemlerini gerçekleştirmek için çeşitli metodlar sunar. Örneğin<br />
bir SELECT ifadesi ile bir <b>DataReader </b>nesnesini doldurmak için <b>ExecuteReader<br />
</b>metodunu kullanabilirsiniz veya nesneler oluşturmak veya varolan nesnelerin<br />
özelliklerini değiştirmek gibi geriye <b>resultset</b> döndürmeyen işlemler<br />
için geriye sadece kaç kayıt etkilendiğini döndüren <b>ExecuteNonQuery</b><br />
metodunu kullanabiliriz. Command nesnesinin bir diğer metodu <b>ExecuteScalar</b><br />
ise geriye sonuç satırlarını değil, sorgu sonucunda oluşacak sonuç kümesinin<br />
ilk satırının birinci sütunudur. </span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>DataReader<br />
Sınıfı</span></b><b><span style=font-size:10.0pt;font-family:Verdana><br />
</span></b><span style=font-size:10.0pt;font-family:Verdana>DataReader sınıfı<br />
bir veri kaynağına read-only ve forward-only bağlantı imkanı sağlar. DataReader<br />
sınıfından oluşturulan nesneler açık bağlantı kullanır. DataReader nesneleri<br />
ile veri okuyabiliriz ancak veri ekleme/düzenleme işlemleri gerçekleştiremez,<br />
sonuç kümesi içinde ileri-geri hareket edemeyiz. DataReader sınıfından<br />
türetilen nesnelerin kullanımı, performansın, esneklikten daha önemli olduğu<br />
durumlarda tercih edilebilir. Bunun nedeni her DataReader nesnesinin kendisine<br />
özel bir Connection nesnesine gereksinim duymasıdır. Sunucu tarafında<br />
istemcilerden açılabilecek maximum bağlantı sayısına ulaşıldığında,<br />
istemcilerin yeni bir bağlantı oluşturabilmek için bağlantıyı açık tutan<br />
DataReader nesnelerinden birinin bağlantısını kapatmasını beklemeleri<br />
gerekecektir.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>SQL Data<br />
Provider tarafından sunulan <b>SqlDataReader</b> nesnesini kullanmak için <b>SqlCommand</b><br />
nesnesinin geriye bir sonuç kümesi döndüren <b>ExecuteReader </b>metodunu<br />
kullanırız. DataReader ile açtığınız bağlantıyı kapatmanız, sunucu performansı<br />
açısından önemlidir. Bağlantıyı <b>Connection</b> nesnesinin <b>Close </b>metodu<br />
ile kapatabiliriz. <b>RecordsAffected</b> özelliği DataReaderın seçtiği kayıt<br />
sayısını döndürmektedir ancak hatasız bir değer ancak bağlantı kapatıldıktan<br />
sonra elde edilebilmektedir. Eğer sorgunun çalıştırılması başarısızlıkla<br />
sonuçlanırsa <b>DataReader </b>nesnesinin <b>FieldCount </b>özelliği 0 olarak<br />
dönecektir.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bir<br />
DataReader nesnesi populate edildiken hemen sonra sonuç kümesinin birinci<br />
satırına odaklanır. Birinci satırı okumak için <b>DataReader</b> nesnesinin <b>Read</b><br />
metodunu kullanırız. <b>Read</b> metodunu yeniden çalıştırarak bir sonraki<br />
kayıda ulaşabiliriz. Son satıra ulaşıldığında, gidilecek bir sonraki satır<br />
olmadığından <b>Read </b>metodu <b>False</b> değerini döner. Sütun değerlerini<br />
GetInt32, GetString veya GetSqlDateTime gibi <b>Get</b> metodlarından herhangi<br />
biri ile alabiliriz. Bu metod sütun değerlerini doğru veri türü formatlamasıyla<br />
edinmemizi sağlar. (Örnek: Drd1.GetString(0) Drd1 adlı DataReaderda bulunulan<br />
satırın birinci sütununun değerini string türünde dönecektir)</span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>DataAdapter<br />
Sınıfı</span></b><b><span style=font-size:10.0pt;font-family:Verdana><br />
DataAdapter</span></b><span style=font-size:10.0pt;font-family:Verdana><br />
sınıfı SQL Server veri kaynağı ile bir sonraki adımda inceleyeceğimiz <b>DataSet<br />
</b>sınıfından türetilmiş nesneler arasında köprü görevi görür. DataAdapter<br />
sınıfını kullanarak bir DataSeti populate edebileceğimiz gibi, local bir<br />
DataSet içindeki verileri SQL Serverdaki veri ile senkronize edebilirsiniz. <b>DataAdapter</b><br />
sınıfı ADO.NET içindeki en temel sınıflardan biridir ve ADO.NET uygulamalarının<br />
esnekliğini arttırmak amacıyla geliştirilmiştir. <b>DataSet</b> sınıfı kendisine<br />
bağlı hiyerarşik bir yapısı olan nesneleri ile bağlantısız (disconnected) veri<br />
erişim imkanı sunar. Bu nedenle DataAdapter sınıfı veri kaynağına sabit bir<br />
bağlantı olmasına ihtiyaç duymaz ve veri sorgulama, güncelleme gibi işlemler<br />
için anlık bağlantılar kurar.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>SQL<br />
Server Data Providerı bize <b>SqlDataAdapter</b> sınıfını sunar. <b>SqlDataAdapter</b><br />
nesnesini bir <b>SqlConnection</b> nesnesi ile bağlantılı olarak kullanmamız<br />
gerekir. <b>DataAdapter</b> nesnesinin kullandığı <b>SqlConnection</b> nesnesi,<br />
DataSet nesnesinde tutulan local veri ile sunucudaki veri arasında köprü görevi<br />
görür. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Local bir<br />
DataSet nesnesini populate etmek için <b>DataAdapter</b> nesnesinin <b>Fill </b>metodunu<br />
kullanırız. Bu metodu kullanabilmek için DataAdapter nesnesi, açık bir<br />
bağlantıya ihtiyaç duyar. Fill metodu çalıştktan sonra uygulamanız bağlantıyı<br />
kapatabilir ve local DataSet nesnesinde barındırılan veri ile çalışmaya devam<br />
edebilir.</span></p>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>SqlDataAdapter</span></b><span<br />
style=font-size:10.0pt;font-family:Verdana> sınıfı SQL Server üzerindeki<br />
veriler üzerinde değişiklik yapabilmemizi sağlayan <b>Update</b> metodunu ve bu<br />
metoda bağlı olaral <b>UpdateCommand</b>, <b>DeleteCommand</b> ve <b>InsertCommand</b><br />
nenelerini sunar. Bu özellikler için doğrudan T-SQL ifadeleri kullanabilir veya<br />
stored procedureleri kullanabilirsiniz. Bu işlemler için gerekli<br />
parametreleri, <b>InsertCommand</b>,<b> UpdateCommand</b> ve <b>DeleteCommand</b><br />
özellikleri tarafından sunulan <b>parameters</b> özelliğini kullanarak<br />
belirtiriz. Bu komutları çalıştırdığımızda değişiklikler local DataSette<br />
yapılır. <b>DataAdapter</b> nesnesinin <b>Update</b> metodunu kullanarak local<br />
DataSetteki işlemleri, Sql Server üzerinde geçerli kılarız.  </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>SqlDataAdapter<br />
nesnesi, veri kaynağı ve yerel dataset arasında optimistic concurencyi<br />
destekler. Gerçekte ADO.NET pessimistic concurrencyi (işlem yapılırken<br />
veritabanının işlemi yapan dışındaki kullanıcıların kullanımına karşı<br />
kilitlenmesi) aktif tutmaz. Keyset cursorlar ve bağlantılı recordsetler<br />
ADO.NETin içinde yer almaz. Optimistic concurrency esnekliğin arttırılmasını<br />
sağlarken local verideki güncellemelerin sunucuyla senkronizasyonu aşamasında<br />
daha fazla dikkat gerektirir. Örneğin; siz son erişiminizi yaptıktan sonra<br />
değişikliğe uğramış bir veriyi, local veri ile güncellemek istediğinizde bir<br />
optimistic concurrency violation oluşacak ve bir exception oluşturulacaktır. </span></p>
<p ><i><span style=font-size:10.0pt;font-family:Verdana><br />
Optimistic ve pessimistic concurrency çok kullanıcılı platformlarda kullanılan<br />
iki veri yönetim mekanizmasıdır. Pessimistic concurrency kullanılırken<br />
kullanıcı veri üzerinde bir değişikliğe başladığı anda ilgili veri kaynağı<br />
diğer kullanıcıların kullanımına karşı kilitlenir ve bu kilit işlem tamamlanana<br />
kadar açılmaz. Optimistic concurrencyde ise bu tür bir kilitleme yapılmaz,<br />
dolayısıyla siz bir veriye güncellemek üzere eriştiğinizde, siz<br />
güncellemelerinizi kaydetmeden başka bir kullanıcı kendi güncellemelerini<br />
kaydedebilir. </span></i></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>ADO.NET<br />
optimistic concurrency violationdan kaynaklanacak hataları önlemek için iki<br />
teknik sunuyor. Birincisi RowUpdated eventi için bir prosedür<br />
oluşturabilirsiniz. ADO.NET bu eventi sunucudaki verinin, değişiklik yapılmış<br />
bir local dataset ile güncellenmesi talebi sonrasında oluşturur. RowUpdated<br />
eventi ile hata oluşması durumunda yapılacak işlemleri her satır için<br />
tanımlayabilirsiniz. İkinci yönetmde ise Update metodunu çalıştırmadan önce  <b>SqlDataAdapter</b><br />
nesnesinin <b>ContinueUpdateOnError </b>özelliğinin değerini True olarak<br />
değiştirebilirsiniz. Bu sayede ADO.NETin tüm gerçekleştirilebilir<br />
güncellemeleri gerçekleştirmesini ve tüm hata mesajlarını local DataSete<br />
yazmasını böylece daha sonra bu hatalarla ilgilenebilmemizi sağlarız. </span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>DataSet<br />
Sınıfı</span></b><b><span style=font-size:10.0pt;font-family:Verdana><br />
DataSet</span></b><span style=font-size:10.0pt;font-family:Verdana> bellekte<br />
yer alan, bir veya daha fazla sayıda tablo ve tablolar arasında ilişkiler<br />
içerebilen bir nesnedir. DataSeti bellekte oluşturulan bir veritabanı olarak<br />
düşünebiliriz. DataSet nesnesi ve kendisine bağlı alt nesneler ADO.NETin<br />
temeli olan bağlantısız veri erişimi mimarisinin temel unsurudur. Aşağıdaki<br />
grafik DataSet nesne modelini görüntülemektedir. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<p  align=center style=text-align:center><span<br />
style=font-size:10.0pt;font-family:Verdana><img width=413 height=641<br />
src="http://www.yazgelistir.com/images/kadir/adonet/image001.gif"></p>
<p><b>Şekil 1:1  DataSet Nesne Modeli</b></span></p>
<p  align=center style=text-align:center><span<br />
style=font-size:10.0pt;font-family:Verdana>&nbsp;</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bir<br />
DataSet içinde yer alan tablolar birer <b>DataTable</b> nesnesidir.. DataSet<br />
içindeki tüm tabloların birleşimi ortaya <b>DataTableCollection</b> sınıfını<br />
ortaya çıkarır. DataSet içinde yer alan tablolar, DataSet içindeki diğer<br />
tablolar ile ilişki içinde olabilir. Bu, Northwind örnek veritabanının aynısını<br />
bir DataSet içinde oluşturabileceğimiz anlamına geliyor. Klasik ADOda yer alan<br />
RecordSet sadece bir sonuç kümesi barındırabildiğinden bu tür bir yapı<br />
oluşturma imkanımız yoktu. </span></p>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>Datatable</span></b><span<br />
style=font-size:10.0pt;font-family:Verdana> nesnesi iki temel yapıdan oluşur:<br />
<b>DataColumn</b> ve <b>DataRow</b> nesneleri. <b>DataTable </b>nesnesindeki<br />
sütunlar, <b>DataTable</b> nesnesinin şemasını oluşturan <b>DataColumnCollection</b><br />
nesnesini oluşturur. Örneğin her bir DataColumn nesnesi, ilgili sütunun kabul<br />
edebileceği veri türünü belirler. <b>DataTable</b> nesneleri <b>PrimaryKey</b> özelliğini<br />
kullanabilirler. Bu özelliği, bir veya daha fazla sayıda DataColumn nesnesi<br />
içeren DataColumn dizisi ile tanımlayabilirsiniz. <b>DataRowCollection</b><br />
sınıfı <b>DataTable</b> içindeki tüm satırları içerir. DataTable içinde yeni<br />
bir satır oluşturmak için <b>NewRow</b> metodunu çalıştırırız. Data sonra sütun<br />
değerlerini belirtir ve yeni <b>DataRow</b>u <b>DataTable</b> nesnesinin <b>DataRowCollection<br />
</b>nesnesine dahil ederiz. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>ADO.NET<br />
DataSet içindeki tablolar arasındaki ilişkiyi <b>DataRelation</b> nesnesi ile<br />
sağlar. Bir DataSet nesnesi içindeki tüm DataRelationlar <b>DataRelationCollection<br />
</b>nesnesini oluşturur. Ek olarak <b>Constraint</b> sınıfını kullanarak<br />
tablolar için yeni Constraintler tanımlayabilirsiniz. Bir Constraint nesnesi<br />
ile unique veya foreign key constaintlerini tanımlayabilirsiniz. Bir <b>DataRelation</b><br />
nesnesi iki tablo arasında Parent-Child ilişkisini temsil eder. İki tablo<br />
arasında bir DataRelation nesnesi oluşturduğunuzda ADO.NET otomatik olarak<br />
child tabloda foreign key, parent tablodaki primary key alanında da unique<br />
constrainti oluşturur. DataSet nesnesinin <b>DataRelationCollection </b>sınıfı<br />
DataSet içindeki tüm <b>DataRelation</b> nesnelerini içerir. DataRelation<br />
nesnelerinin üyelerine <b>DataTable</b> nesnesinin <b>ChildRelations</b> ve <b>ParentRelations</b><br />
özellikleri ile erişebilirsiniz. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bir <b>DataTable<br />
</b>nesnesinin <b>DataRowCollection</b>ından bir<b> DataRow</b> silmek için<br />
kullanabileceğimiz iki yöntem vardır. Birinci yöntem DataTable içindeki DataRow<br />
nesnelerinde geçerli olacak <b>Delete</b> metodunun kullanımıdır. Bu metod,<br />
DataRow nesnesinin <b>RowState </b>özelliğine <b>Deleted</b> değerini<br />
verecektir ancak aslında satırı local tablodan silmiş olmayacaktır (Uygulamanız<br />
silinmiş bir satırı DataRow nesnesinin <b>RejectChanges</b> metodunu kullanarak<br />
geri getirebilir). Alternatif bir yöntem ise bir satır için <b>Delete</b><br />
metodunun uygulanmasıdır, bu sayede bu satır, <b>AcceptChanges</b> metodu<br />
tarafından geri getirilemeyecektir.</span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>İkinci<br />
yöntem ise <b>DataTable </b>nesnesinin <b>DataRowCollection</b> nesnesinin <b>Remove</b><br />
metodunun kullanılmasıdır. Bu metod, silmek istediğiniz satırın indexini<br />
belirtmenizi gerektirir. Index değeri 0dan başlar ve her kayıt için 1 artarak<br />
devam eder. Bu yöntemin kullanılması ile silinen bir DataRow, geri alınamaz. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Local<br />
değişiklikleri veri kaynağı ile senkronize etmeyi planladığınız durumlarda<br />
Delete metodunu kullanmanızı öneririm. Update metodu veri kaynağı ile<br />
senkronizasyon işlemi sonrasında satır için <b>AcceptChanges</b> metodunu<br />
çalıştıracaktır. Bir satırın <b>Remove</b> metodu ile silinmesi, Update<br />
metodunun çalıştırılması bir concurrency violation hatası verecektir.</span></p>
<p ><b><span style=font-size:11.0pt;font-family:Verdana>DataView<br />
Sınıfı</span></b><b><span style=font-size:10.0pt;font-family:Verdana><br />
DataTable </span></b><span style=font-size:10.0pt;font-family:Verdana>nesnesindeki<br />
<b>DataView</b> nesnesini, SQL Serverdaki view nesneleri gibi görebiliriz.<br />
DataView nesnesi, <b>DataTable nesnesinde doğrudan mümkün olmayan</b><br />
filtreleme, sorgulama ve gelişmiş arama özelliklerine sahiptir. Bir DataTable<br />
nesnesi, farklı filtreleme ve sıralama ayarları tanımlanmış birden çok adet<br />
DataView nesnesine sahip olabilir. Bir <b>DataView</b> nesnesindeki satırları <b>RowFilter</b><br />
veya <b>RowStateFilter</b> özelliklerinden biri ile filtreleyebilirsiniz. <b>RowFilter</b><br />
özellikleri <b>WHERE</b> ifadesi ile aynı formattadır. RowFilter ifadelerini<br />
çift tırnak () içinde belirtiriz. Eğer ifade değişkenlerden değer alıyorsa<br />
bunları tek tırnak ile birleştiririz. <b>RowStateFilter</b> özelliği <b>DataTable</b><br />
içindeki satırların <b>DataViewRowState</b> özelliklerine göre filtrelenmesini<br />
sağlar. Bu özelliğe göre sıralama yaparak <b>Delete </b>metodu ile silinen,<br />
yeni eklenen ve değerleri değiştirilen satırların listesini alabiliriz. </span></p>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>DataView</span></b><span<br />
style=font-size:10.0pt;font-family:Verdana> nesnesinin <b>Sort </b>metodu ile<br />
DataView içindeki satırları sıralayabiliriz. Eğer birden çok satıra göre<br />
sıralama yapmak istiyorsak sütun isimlerini virgül (,) ile ayırarak sıralamayı<br />
gerçekleştirebiliriz. Bir sütuna göre artan (1-2-3-4..) sıralama yapmak için<br />
ASC, azalan (9-8-7..) sıralama yapmak için DESC ifadelerini kullanırız. </span></p>
<p ><b><span style=font-size:10.0pt;font-family:Verdana>RowFilter</span></b><span<br />
style=font-size:10.0pt;font-family:Verdana> özelliği ile bir satır veya sonuç<br />
kümesi döndürebilsekte, bunun kullanımı çok verimli değildir. RowFilter<br />
özelliğini genellikle bir defaya mahsus DataView nesnesini indexlemenin masrafından<br />
kaçınmak için kullanırız. Eğer bir satır veya birden çok satır bulmaya ihtiyaç<br />
duyarsanız <b>Find</b> veya <b>FindRows</b> metodunu çalıştırmanızı öneririm. <br />
Her iki metodunda çalışması için önce <b>Sort </b>özelliğini bulmak istediğiniz<br />
kriterlere göre tanımlamanız gerekmektedir. <b>FindRows</b> metodu bir <b>DataRowView</b><br />
dizisi döndürecektir. <b>Find </b>metodu Find kriteri ile eşleşen satırın satır<br />
indexini döndürecektir. Row indexi kullanarak DataView içindeki satırı<br />
görüntüleyebilir veya ilgili DataTableı görüntüleyebiliriz. </span></p>
<p ><span style=font-size:10.0pt;font-family:Verdana>Bir sonraki bölümde,<br />
ADO.NET ile SQL Servera bağlantı oluşturma konusunu ele alıyor olacağız..</p>
<p>Kadir SÜMERKENT<br />
kadirs@yazgelistir.com</span></p>
<p></span></td>
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/microsoft-visual-basic-net-ve-ado-net-ile-sql-server-islemleri-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ADO.Net ile Excel tablolarına DB gibi baglanmak</title>
		<link>http://www.systemdoktoru.com/2010/04/ado-net-ile-excel-tablolarina-db-gibi-baglanmak/</link>
		<comments>http://www.systemdoktoru.com/2010/04/ado-net-ile-excel-tablolarina-db-gibi-baglanmak/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

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


                                                    
Excel dosyalarına aynen [...]]]></description>
			<content:encoded><![CDATA[</tr>
<tr>
<td colspan="3">
                                                    <span id="lblMakale">
<p><font face="Verdana">Excel dosyalarına aynen bir DB gibi erişmek, ADO.Net ile kolayca mümkün oluyor. Pek bir alternatif olarak sayılmasada, çogu zaman ihtiyaç duyula<br />
bilmektedir. ADO.Net ile bu işlemi gerçekleştirmek, 2 aşamada mümkün oluyor. </font></p>
<p><font face="Verdana"> <br />
1. Her hangi bir Excel dosyasındaki belirledigimiz bir hücre grubunu ilk olarak tanımlamamız gerekiyor. ADO.Net bu tanımladıgımız alanlari sanki bir veri tablosu gibi<br />
algılayacak. Benim örnek oluşturdugum tablo aşagıdaki gibidir</font></p>
<p><font face="Verdana"><br />
<img border="0" src="http://www.yazgelistir.com/Makaleler/Resimler/1000000654_01.JPG" width="213" height="170" align="left"><br />
Tablomuzu oluşturduktan sonra, &quot;Insert -&gt; Names -&gt; Define&quot; ile üzerinde çalışacagımız tabloyu ve verilerini oluşturacagız.</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">&quot;Define&quot; kısmında gelen pencerede, ben &quot;isimler&quot; diye bir define tanımladim (yani tablomun adı &quot;isimler&quot;), &quot;Add&quot; tuşunana basmadan önce aşagıdaki &quot;Refers to:&quot; kısmına hangi hücreleri kapsadıgını seçmemiz gerekmektedir.</font></p>
<p><font face="Verdana"><br />
<img border="0" src="http://www.yazgelistir.com/Makaleler/Resimler/1000000654_02.JPG" width="376" height="260" align="left"></font></p>
<p><font face="Verdana"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tıpkı aşagıdaki gibi, ilgili alanı seçiyoruz.<br />
&nbsp;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img border="0" src="http://www.yazgelistir.com/Makaleler/Resimler/1000000654_03.JPG" width="211" height="178"></p>
<p>
A1 den B7 e kadarlık hücre blogunun hepsini &quot;isimler&quot; olarak tanımladık. Artık kaydedip cıkabiliriz.</font></p>
<p><font face="Verdana">2. Bu kısımda ise C# da erişim yolunu görecegiz;</font></p>
<p><font face="Verdana">İlk olarak </font><br />
<span style="font-size:8.0pt;font-family:&quot;Courier New&quot;;<br />
color:blue">using</span><span style="font-size:8.0pt;font-family:&quot;Courier New&quot;"><br />
System.Data.OleDb;</span><font face="Verdana"> uzay ismini eklemeyi unutmuyoruz.<br />
Ben aşagıdaki gibi oldukca basit bir form hazırladım, bir listview ve bir<br />
buttondan oluşuyor.</font></p>
<p><img border="0" src="http://www.yazgelistir.com/Makaleler/Resimler/1000000654_04.JPG" width="680" height="186"></p>
<p class="MsoNormal" style="text-autospace: none">
<span style="font-size: 8.0pt; font-family: Courier New; color: blue; background-color: #FFFF00"><br />
private</span><span style="font-size: 8.0pt; font-family: Courier New; background-color: #FFFF00"><br />
<span style="color:blue">void</span> btn_XLSden_Click(<span style="color:blue">object</span><br />
sender, System.EventArgs e)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">//connection stringimiz<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">//bin klasorumuzn icindeki derledigimiz<br />
EXE ile aynı klasorun iceresinde<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue">string</span> connstr =<br />
<span style="color:red">&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data<br />
Source=Deneme.XLS;Extended Properties=&quot;Excel 8.0;HDR=Yes;IMEX=2&quot;&quot;</span>;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">// EXCEL dosyamızı açıyoruz ve okuyoruz<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbConnection conn = <span style="color:blue">new</span><br />
OleDbConnection(connstr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //isimler<br />
tablosu aslında Excel dosyamızda define ile tanimladigimiz alanin ismi<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand cmd = <span style="color:blue">new</span><br />
OleDbCommand(<span style="color:red">&quot;Select * From isimler&quot;</span>,conn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader dtr = cmd.ExecuteReader();</span></p>
<p class="MsoNormal" style="text-autospace: none">
<span style="font-size: 8.0pt; font-family: Courier New; background-color: #FFFF00">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">//eger tablo bos degil ise <br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">//kolon isimlerini alıp<br />
listview in kolonlarını olusturuyoruz<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue">for</span>(<span style="color:blue">int</span><br />
i=0;i&lt;=dtr.FieldCount-1;++i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
listview1.Columns.Add(dtr.GetName(i),65*(i+1),HorizontalAlignment.Center);&nbsp;</span></p>
<p class="MsoNormal" style="text-autospace: none">
<span style="font-size: 8.0pt; font-family: Courier New; background-color: #FFFF00"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">//tek tek okuyoruz ve listviewe ekliyoruz<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListViewItem satir = <span style="color:blue">new</span><br />
ListViewItem(); <span style="color:green"><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue">while</span>(dtr.Read())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; satir = listview1.Items.Add(dtr[0].ToString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; satir.SubItems.Add(dtr[1].ToString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:green">//sonlandırıyoruz<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtr.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Close();<br />
}</span></p>
<p><font face="Verdana">Fazladan bir açıklama yapmaya gerek duymuyorum, gerekli<br />
açıklamaları comment olararak kodlarla birlikte yaptım. Gördügünüz gibi oldukca<br />
basit, diger işlemleride sıradan ADO.Net commandları ile<br />
gerçekleştirebilirsiniz.</font></p>
<p><img border="0" src="http://www.yazgelistir.com/Makaleler/Resimler/1000000654_05.JPG" width="677" height="180"></p>
<p><font face="Verdana">ConnectionString dogru yapıldıgı anda hiç bir sorunla<br />
karşılaşmazsınız. <br />
</font><br />
<span style="color: red; font-size: 8.0pt; font-family: Courier New"><br />
&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Deneme.XLS;Extended<br />
Properties=&quot;Excel 8.0;HDR=Yes;IMEX=2&quot;&quot;</span></p>
<p><font face="Verdana">Buradaki &quot;Deneme.XLS&quot;in yeri farklı bir klasorde ise<br />
<a href="file:///c://denemeler//deneme.XLS">c:\denemeler\deneme.XLS</a> gibi<br />
yerini gösterebilirsiniz. Hepinize çalışmalarınızda başarılar diliyorum, kolay<br />
gelsin&#8230;</font></p>
<p></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
                                        </p>
<table id="Table21" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td class="menuLeftCaption" colspan="3">
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/ado-net-ile-excel-tablolarina-db-gibi-baglanmak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SqlBulkCopy Sınıfını Kullanarak Veri Transferi</title>
		<link>http://www.systemdoktoru.com/2010/04/sqlbulkcopy-sinifini-kullanarak-veri-transferi/</link>
		<comments>http://www.systemdoktoru.com/2010/04/sqlbulkcopy-sinifini-kullanarak-veri-transferi/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

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


                                                    
SqlBulkCopy Sınıfını Kullanarak [...]]]></description>
			<content:encoded><![CDATA[</tr>
<tr>
<td colspan="3">
                                                    <span id="lblMakale">
<p style=" text-align:justify;"><font face="Verdana" size="4"><b><center>SqlBulkCopy Sınıfını Kullanarak Veri Transferi<br />
</center></b></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"></p>
<p>Çalıştığım merkezdeki 6 yıllık milyonlarca verinin bir yerden başka bir yere aktarılması gerekiyordu. Bu sefer alışmış olduğum klasik yöntemler yerine başka bir çözüm aradım. Sonunda.NET 2.0 ile gelen SqlBulkCopy sınıfı ile karşılaştım. İşte bu makalede bu sınıf ile neler yapabileceğimize bir göz atacağız.</p>
<p>Bir kaynaktan başka bir kaynağa veri transferi, yazılım dünyası içinde sıklıkla karşılaşılan bir durumdur. Bu işlem birçok farklı senaryo için uygulanabilir. Eski sistemden yeni sisteme geçiş, veri yedekleme, farklı yerlerden veri toplama vs. .NET 2.0, farklı kaynaklardan SQL Server veritabanına veri aktarmanıza olanak veren SqlBulkCopy sınıfını içerir (System.Data.SqlClient.SqlBulkCopy). İşte bu makalede, SqlBulkCopy sınıfını farklı yönleriyle ele alacağız.</p>
<p></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="3" color="#003366"><b><center>Veritabanı Tasarımı</center></b></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"></p>
<p>Şimdi, herkesin de rahatlıkla uygulayabilmesi için elimizdeki kaynakları da kullanarak bir veritabanı tasarımı yapalım. SQL Server 2005 kurulu tüm bilgisayarlarda bulunan AdventureWorks veritabanındaki Person.Address tablosunu baz alarak 3 yeni tablo yapalım. Aşağıdaki veritabanı diyagramını inceleyerek; tabloları oluşturabilirsiniz. Çok sade, hoş bir tasarım oldu <img src='http://www.systemdoktoru.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p></font></p>
<p><center><br />
<img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001195_1.jpg"><br />
</center></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Burada Address_Old ve Address_New tablolarımız aynı eski Address tablosunda olduğu gibi aynı şemaya sahip. Sadece Address_Specific tablosu bunlardan farklılık gösteriyor. Bunun sebebini makalenin ilerleyen bölümlerinde bulabileceksiniz.</p>
<p>Aslında etkili gösterim için daha fazla kayıt içeren bir tablo bulmak isterdim ama Address_Old tablosu da yeterli olacak sanırım. Bu tablo tam 19614 satır içeriyor. Şimdi burada asıl düşünülmesi gereken kayıtların çokluğu değil; ani ya da acil bir durum karşısında bu kadar kaydı nasıl bir yerden başka bir yere aktaracağımızdır. Örneğin, tüm bu tablo satırlarını Address_Old tablosundan Address_New tablosuna nasıl aktaracağız. Şimdi bu gibi senaryolara bir bakalım.</p>
<p></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="3" color="#003366"><b><center>Address_Old Tablosundan Address_New Tablosuna Veri Transferi</center></b></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"></p>
<p>SqlBulkCopy, WriteToServer adında veriyi bir kaynaktan hedefteki kaynağa transfer etmek için kullanılan bir instance metot içerir. WriteToServer metodu, DataRow[] dizisinde, DataTable da ve DataReader üzerinde işlem yapabilir. Duruma göre istediğiniz herhangi bir taşıyıcıyı seçebilirsiniz. Bunda bir kısıtlama yok ama birçok durumda olduğu gibi DataReader ı seçmek iyi olur sanırım. Bunun nedeni DataReader yapısından kaynaklanır. DataReader sadece ileri (forward-only) ve salt okunabilir (read-only) çalışır. Herhangi bir şekilde veri tutmasına, bağlamasına  gerek yoktur ve işte bu yüzden DataTable ve DataRows[] dan kat kat hızlı çalışır (bu senaryoda). Aşağıdaki kodda kaynak tablomuzdan hedefteki tablomuza veriyi nasıl aktarabileceğimizi görebilirsiniz.</p>
<p></font></p>
<p><center><br />
<img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001195_2.jpg"><br />
</center></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Şimdi burada bahsedilecek birkaç nokta var. Öncelikle, veritabanı tablosundan satırları çekmek için DataReader kullanıyoruz. SqlBulkCopy sınıfı nesnesi bulkCopy, DestinationTableName özelliğine burada Address_New olan tablomuzu set ediyor. Address_New burada hedef tablomuz. Çünkü verileri Address_Old tablosundan, Address_New tablosuna aktaracağız. bulkCopy nesnesi,  NotifyAfter özelliği tarafından belirlenen satırlara ulaştıktan sonra SqlRowsCopied olayını da çalıştırıyor. Bunun anlamı da, bu olay NotifyAfter özelliği 1000 olarak ayarlandığından dolayı; her 1000 satırdan sonra SqlRowsCopied olayı çalıştırılacaktır.</p>
<p>Burada BatchSize özelliği de, performans büyük çoğunlukla ona bağlı olduğu için oldukça önemlidir. BatchSize, veri transferini başlatmak için bir defada veritabanına ne kadar satırın gönderilmesi gerektiğini tutar. Burada bu değeri biz 500 olarak ayarladık. Bunun anlamı bir defada, DataReader, bulk copy işlemini gerçekleştirebilmek için veritabanına gönderilmek üzere 500 satır okuyacaktır. Varsayılan olarak BatchSize 1 olarak ayarlanmıştır. Bu da, veritabanına her bir satırın tek tek gönderileceği anlamını taşır.</p>
<p>Farklı BatchSize değerleri size farklı sonuçlar verecektir. Burada hangi BatchSize değerinin size en çok uyacağını farklı testler yaparak bulabilirsiniz.</p>
<p></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="3" color="#003366"><b><center>Farklı Şemalara Sahip Tablolar Arasında Veri Transferi</center></b></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Bir önceki örnekte, her iki tablomuzda aynı şemaya sahipti. Fakat bazen, farklı şemalara sahip tablolar arasında da veri transferi yapmak zorunda kalabiliyoruz. Şimdi bir adres tablosu içindeki tüm adres satırlarını ve posta kodlarını, Address_Old tablosu içinden Address_Specific tablosu içine aktarmak istediğimizi varsayalım. Farklı sütun isimlerini sahip oldukları için, dolayısıyla bu iki tablonun şemaları da farklıdır. En başta gördüğümüz veritabanı tasarımını gösteren diyagram resminde de bunu görebiliriz.</p>
<p></font></p>
<p><center><br />
<img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001195_3.jpg"><br />
</center></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Burada ColumnMappings koleksiyonu, kaynak tablo ile hedef tablo arasındaki sütunları belirlemede kullanılır.<br />
</font></p>
<p style=" text-align:justify;"><font face="Verdana" size="3" color="#003366"><b><center>XML Dosyasından Veritabanı Tablosuna Veri Transferi</center></b></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"></p>
<p>Veri kaynaklarını sadece veritabanı tabloları ile sınırlayabilir miyiz? Elbette hayır. XML dosyalarını da veri kaynağı olarak kullanabiliriz. Aşağıda, bulk copy işleminde kaynak olarak kullanabileceğimiz; çok basit bir XML dosyası var.</p>
<p></font></p>
<p><center><br />
<b>Addresses.XML Dosyası</b><br />
<img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001195_4.jpg"><br />
</center></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Bu da kaynak kodumuz.<br />
</font></p>
<p><center><br />
<img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001195_5.jpg"><br />
</center></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Dosya ilk olarak DataTable içinde okunuyor ve daha sonra SqlBulkCopy sınıfının WriteToServer metoduna aktarılıyor. Yine, hedef tablo olarak, Address_Specific tablosunu seçtiğimiz için ColumnMappings kullanarak sütünları belirliyoruz.</p>
<p>Daha bunun gibi birçok senaryo yaratarak sizde değişik örnekler yapabilirsiniz. Bu arada SqlBulkCopy sınıfının gücünü özellikle belirtmek isterim. Örneğimizde kullandığımız 19614 satırlık kaydın bir tablodan diğerine aktarılması, bir göz kırpması için geçen süre ne kadarsa o kadar sürdü <img src='http://www.systemdoktoru.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="3" color="#003366"><b><center>Özet</center></b></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><br />
Bu makalede,  .NET 2.0 ile birlikte gelen SqlBulkCopy sınıfını nasıl kullanabileceğimizi gördük. SqlBulkCopy sınıfı, bir veri kaynağından SQL Server veritabanına veri transfer etmek istediğimizde; işimizi oldukça kolaylaştırır. Sizde değişik senaryolarla bunu test edebilirsiniz. </p>
<p><b>Not:</b> Bu sınıf, .NET Framework .NET Compact Framework 3.0 ve 2.0 versiyonlarının tümünde desteklenmektedir.</p>
<p></font></p>
<p style=" text-align:justify;"><font face="Verdana" size="2">Bir sonraki makalelerde görüşmek üzere. İyi çalışmalar&#8230;<br />
</font></p>
<p></p>
<p style=" text-align:justify;"><font face="Verdana" size="2"><b>Tayfun AKCAY<br />
</b><br />
</font></p>
<p><font face="Verdana" size="1"><b><a href="mailto:tayfun@tayfunakcay.com" style="color:black;">tayfun@tayfunakcay.com</a></b><br />
</font></p>
<p></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
                                        </p>
<table id="Table21" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td class="menuLeftCaption" colspan="3">
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/sqlbulkcopy-sinifini-kullanarak-veri-transferi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Data Access Application Block</title>
		<link>http://www.systemdoktoru.com/2010/04/microsoft-data-access-application-block/</link>
		<comments>http://www.systemdoktoru.com/2010/04/microsoft-data-access-application-block/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

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


                                                     
Giriş


.Net Framework, [...]]]></description>
			<content:encoded><![CDATA[</tr>
<tr>
<td colspan="3">
                                                    <span id="lblMakale"> </p>
<p><b>Giriş<br />
</b>
</p>
<p align="justify">.Net Framework, veritabanı ile çalışmak için yazılım geliştiricelere ADO.NETi sundu. ADO.NET bize veriyi görüntülemek ve veri üzerinde işlemler yapmamızı sağlar. Veritabnındaki bazı bilgilere erişmek ve uygulama üzerinde bazı parametreleri kullanabileceğini göz önünde bulunduralım. Bu işlemi 6-7 satır kod yazarak kolayca yapabiliriz. Fakat, 5-6 satır kodu tekrar tekrar yazmak zorunda kaldığımızda bu işlemi yapmak kolay olmayacaktır.
</p>
<p align="justify">Microsoft bunun için, Daha az kod ile ortak işleri yapmak için kullanılabilen Data Access Application Blocku geliştirdi. Data Access Application Blocku aşağıdaki adresten indirebilirsiniz.&nbsp;
</p>
<p>&nbsp;<br />
&nbsp;<br />
<a href="http://msdn2.microsoft.com/en-us/library/ms954827.aspx">http://msdn2.microsoft.com/en-us/library/ms954827.aspx</p>
<p></a><br />
</p>
<p><b>Microsoft .net Data Access Application Block Nasıl Kullanılır ?</p>
<p></b>
</p>
<p align="justify">İlk olarak<br />
Data Access Application Block Version 2.0.(Daha eski/yeni versionda olabilir) indirip kuralım. Ilk olarak the Microsoft .net Data Access Application Block projesi için .dll dosyası oluşturacağız. Projeyi build ettikten sonra kendi projemize basitçe ekleyebiliriz. Kendi projemize ekledikten sonra bin klasörü içindeki .dll dosyasınıda build edelim.
</p>
<p><b>
<p>
Data Access Application Block olmadan Dataya Erişmek
</p>
<p></b></p>
<p>İlk olarak Application olmadan veriye nasıl erişildiğine bakacağız. Aşağıda veritabanına 2 parametre ekleyen basit bir örnek yapacağız. </p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 6.15in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="590">
<p>string connectionString = (string) <br />
ConfigurationSettings.AppSettings["ConnectionString"]; <br />
SqlConnection connection = new SqlConnection(connectionString);<br />
SqlCommand command = new SqlCommand(&#8220;INSERT_MUSTERI&#8221;,connection);<br />
command.CommandType = CommandType.StoredProcedure;<br />
command.Parameters.Add(new SqlParameter(&#8220;@Name&#8221;,SqlDbType.NVarChar,50));<br />
command.Parameters["@Name"].Value = txtName.Text;<br />
command.Parameters.Add(new SqlParameter(&#8220;@Surname&#8221;,SqlDbType.NVarChar,10));<br />
command.Parameters["@Surname "].Value = txt Surname.Text;<br />
connection.Open();<br />
command.ExecuteNonQuery();<br />
connection.Close();
</p>
</td>
</tr>
</tbody>
</table>
<p></p>
<p align="justify">Görüldüğü gibi veritabanına parametre eklemeye çalıştığımızda 6-7 satır kod ile işimizi tamamladık. Fakat 10 yada daha fazla parametre eklemeye çalıştığımızda geliştirme zamanı bir hayli uzayacaktı.
</p>
<p>Şimdi aynı işlemi<br />
 Microsoft .net Data Access Application Block kullanarak yapalım.</p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 6.15in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="590">
<p>using Microsoft.ApplicationBlocks.Data; <br />
SqlHelper.ExecuteNonQuery(connection,&#8221;INSERT_MUSTERI&#8221;,new <br />
SqlParameter(&#8220;@Name&#8221;,txtName.Text) ,new SqlParameter(&#8220;@Surname&#8221;,txt Surname.Text) );
</p>
</td>
</tr>
</tbody>
</table>
<p></p>
<p>Gördüğünüz gibi 5-6 satır kod yazmak yerine işimizi tek satırda tamamladık.
</p>
<p>Bu işlemi SqlHelper classı ile yaptığımız gördük. Peki bu SqlHelper nereden çıktı?
</p>
<p align="justify">Projemizin namespacelerine<br />
<i>Microsoft.ApplicationBlocks.Data<br />
</i><br />
eklersek SqlHelper Classına erişebiliriz. SqlHelper Classı veritabanına erişmek için static metodlar içeren ve Microsoft tarafından geliştirilen bir classdır. Her hangi bir text editörü ile SqlHelper Classını açabilir ve inceleyebilirsiniz.</p>
<p><b>SqlHelper Class<br />
</b>
</p>
<p>SqlHelperin içindeki static metodlar;
</p>
<p>ExecuteNonQuery
</p>
<p>ExecuteDataSet
</p>
<p>ExecuteReader
</p>
<p>ExecuteScalar
</p>
<p>ExecuteXMLReader</p>
<p>
Evet artık örneğimize geçebiliriz. İlk olarak bir Windows Application açalım.
</p>
<p>
<img height="412" src="http://www.semgoksu.com/images/MicrosoftDataAccessApplicationBlock_files/image001.jpg" width="575" border="0" /></p>
<p>Şimdi SqlHelper Classını projemize ekleyelim. (DLL olarak da ekleyebiliriz).
</p>
<p>
<img height="370" src="http://www.semgoksu.com/images/MicrosoftDataAccessApplicationBlock_files/image002.jpg" width="576" border="0" /><br />
</p>
<p>&nbsp;&nbsp;<br />
&nbsp;</p>
<p>Şimdi projemizin namespacelerine ApplicationBlocks.Datayı ekleyelim.
</p>
<p>using Microsoft.ApplicationBlocks.Data;
</p>
<p>Ekledikten sonra formumuzun üzerine 1 adet buton ve bir gridview ekleyelim.
</p>
<p><img height="358" src="http://www.semgoksu.com/images/MicrosoftDataAccessApplicationBlock_files/image003.jpg" width="385" border="0" /><br />
</p>
<p>&nbsp;</p>
<p>Evet Şimdi ExecuteDataseti çalıştıracak kodları yazalım.
</p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 6.15in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="590">
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string sqlstring = &#8220;Select * from Musteriler&#8221;;
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataGridView1.DataSource = SqlHelpera.ExecuteDataset(&#8220;Data Source=localhost; Initial Catalog=SemGoksuDB; trusted_connection=yes&#8221;, CommandType.Text, sqlstring).Tables[0];
</p>
<p>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
</p>
</td>
</tr>
</tbody>
</table>
<p></p>
<p>&nbsp;<br />
&nbsp;</p>
<p>Şimdi projeemizi çalıştıralım.
</p>
<p>&nbsp;<br />
&nbsp;</p>
<p>
<img height="356" src="http://www.semgoksu.com/images/MicrosoftDataAccessApplicationBlock_files/image004.jpg" width="387" border="0" /><br />
</p>
<p>&nbsp;</p>
<p>Projemizi çalıştırdıktan sonra kayıtlarımızı listeledik. Gördüğünüz gibi çok kolay bir şekilde 1-2 satır ile işimizi yaptık.
</p>
</p>
<p class="style7">Bu makalenin de sonuna geldik, başka bir makalede görüşmek üzere başarı ve iyi günler dilerim.
</p>
<p class="style7">Sem GÖKSU<br />
MCP | MCAD.NET | MCTS
</p>
<p class="style7">Örnek Kodlar için mail adresimi kullanabilirsiniz
</p>
<p class="style7"><strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: Verdana"><a href="mailto:msemgoksu@semgoksu.com"><span style="COLOR: gray">semgoksu@semgoksu.com<br />
</a></p>
<p></strong>
</p>
<p class="style7"><strong><u>Kaynaklar<br />
</u><br />
</strong><br />
<b><span style="FONT-SIZE: 8pt; COLOR: gray"></p>
<p></b><br />
<strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: Verdana"><a href="http://msdn.microsoft.com/"><span style="COLOR: gray">http://msdn.microsoft.com<br />
</a></p>
<p></strong>
</p>
<p> </span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
                                        </p>
<table id="Table21" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td class="menuLeftCaption" colspan="3">
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/microsoft-data-access-application-block/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ADO.NET ile MySQL Kullanım Örneği</title>
		<link>http://www.systemdoktoru.com/2010/04/ado-net-ile-mysql-kullanim-ornegi/</link>
		<comments>http://www.systemdoktoru.com/2010/04/ado-net-ile-mysql-kullanim-ornegi/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

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


                                                    



ADO.NET ile  [...]]]></description>
			<content:encoded><![CDATA[</tr>
<tr>
<td colspan="3">
                                                    <span id="lblMakale"><br />
<table width="583" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="583" height="551" valign="top">
<p><strong>ADO.NET ile  MySQL Kullanım Örneği &#8211; 1</strong><br />
      Merhaba arkadaşlar;<br />
      Öncelikle bu makalemizin  istek üzerine yayınlandığını belirterek sözlerime başlamak isterim. Bu da  demektir ki Mspro.org adresinden bana istekte bulunabilirsiniz. Bu makalemizin  konusu ADO.NET ile MySQL veritabanı ilişkileri ile ilgili olacak.  INSERT, DELETE, UPDATE gibi SQL komutlarını  inceleyeceğiz.  Şimdi ilk yapmamız  gereken VS.NET 2005 ya da Visual Web Developer içinde MySQL kullanabilmemiz  için Bir adet programcığımız var. Bunu belirteceğim adresten indirip yüklemeniz  gerekmektedir. Daha sonrada nedir bu yüklediğimiz şey onu açıklayacağım. İşte o  adres <a href="http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-5.0.8.1.exe/from/http:/mysql.easynet.be/">http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-5.0.8.1.exe/from/http://mysql.easynet.be/</a> . Dosyayı bilgisayarınıza indirip kurma işlemini gerçekleştirdikten sonra  vs.net i açıp yeni bir AJAXEnabledWebSite oluşturun.  Ajax Projesi oluşturmamızın sebebi örneğimiz  içerisinde Update Panel kullanacak olmamız. Yani kısaca Update Panel nasıl  kullanılır onu da göreceğiz. Makalemizde MySQL in pc nizde kurulu olduğunu ve  kullanmayı bildiğinizi varsayarak devam edeceğiz.<br />
    Projeniz oluştuktan sonra  açıklamalarıma başlayabiliriz. Bu yüklemiz olduğumuz MySQL .NET connector  adındaki setup dosyası bize .net içerisinde MySQL kullanmamıza yardımcı olacak  referans dosyalarını getirmekte ve   vs.net e entegre etmektedir. İlk olarak oluşturduğumuz projemize bu  dosyaları referans etmemiz gerekmektedir. Aşağıdaki resimler de bunu nasıl  yapacağınız sırayla gösterdim.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_001.jpg" width="273" height="531" /></p>
<p align="center">&nbsp;</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_002.jpg" width="574" height="397" /></p>
<p>Projeniz artık MySQL ile  çalışabilecek her şeye sahip. Şimdi deneme adında bir Database oluşturun ve bu  Database içerisie maillist adında bir tablo ve bu tablonun içerisine aşağıda ki  resimde görünen alanları ekleyiniz.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_003.jpg" width="497" height="83" /></p>
<p align="center">
Id alanı auto inc. Olacak buna dikkat ediniz.</p>
<p>Evet zannediyorum  db olayını hallettiniz. Zaten burada db  yaratma gibi konulara girmeyeceğiz. Neyse<br />
      Db hazır olduğuna göre şimdide sıra form tasarımımızda. Aşağıdaki tabloda formumuza  hangi kontrollerin olması gerektiği ve bu kontrollerin hangi isimlere sahip  olması gerektiği verilmiştir.  İsterseniz  farklı isimler verebilirsiniz. Fakat örneği bitirdikten sonra bunu denemeniz  daha sağlıklı olacaktır.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_012.jpg" width="361" height="234" /> </p>
<p>
      Yapmamız gereken son şey  ise GridView kontrolünü update panel içerisine almak. Sonra form görüntümüz  aşağıdaki gibi olacaktır.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_004.jpg" width="296" height="373" border="1" /></p>
<p>                Formumuzu  bu şekilde düzenledikten sonra şimdi sıra kodlarımızı yazmaya geldi. Aşağıda  vermiş olduğum ekran görüntüsünde bulunan kodlar tam olarak şu işlemi  yapmaktadır.  MySQL veritabanına  bağlanmamız için gerekli olan namespace (isim uzayları) lerdir. Gerekli nesneleri  .NET içerisine import eder ve kullanmamıza olanak verir. Eğer eklemezsek ne  olur ?. MySQL ile hiçbir şekilde ilişki kuramayız. Farklı metotlar dışında  tabii ki.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_005.jpg" width="247" height="39" /></p>
<p>Not: Bu Kısım sayfamızın en başına import edilecek.  Bildiğinizi biliyorum fakat hatırlatayım dedim.<br />
      Burayı da  hallettiğimize göre şimdi sıra asıl kodlarımızda işte o kodlarda aşağıda.  İsterseniz senaryomuzdan bahsedeyim biraz. Ne yapacağız. Basit bir işlem hemen  korkmayın. Gördüğünüz gibi 2 adet textbox ımız var. Bu kontrollerin içeriğini  dbye yazdırıp buradan da gridview kontrolünde göstereceğiz. Bu şekilde basit  bir mail list iniz olacak. Artık kodları yazmaya başlıyoruz.</p>
<p>    <img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_006.jpg" width="713" height="727" /></p>
<p align="center">&nbsp;</p>
<p>Yukarıda göründüğü gibi artık gridview kontrolümüz dolu bir  şekilde geliyor. Şimdi yapmamız gereken şey db mize veri eklemek işte bunun  içinde aşağıdaki kodları yazdım. </p>
<p>    <img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_011.jpg" width="719" height="573" /></p>
<p>Bu void i ise btn_ok in  click eventinde çağırıyoruz. Bu durumda şöyle bir şey çıkıyor ortaya. Update  panel nasıl çalışacak. Tabii ki Asenkron çalışacak. Yoksa sayfa gider ve gelir.  Aşağıda resimlerini verdim. Aralarda da açıklamalar yaptım. Konumuz Update  panel olmadığı için fazla detaya girmiyoruz. Zaten nette gerekli dokümanları  fazlasıyla bulursunuz. Bu nedenled e Update panel ile ilgili bir yazı  düşünmüyorum.</p>
<div align="center">
<p><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_007.jpg" width="283" height="227" /></p>
</p></div>
<p align="center">Update Panel seçili iken Properties penceresinden Triggers Özelliğine  tıklıyoruz. Sonra.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_008.jpg" width="589" height="421" /></p>
<p align="center">Add butonundan AsyncPostBack Trigger seçeneğini seçiyoruz. Members  bölümüne bir Asenkron üyenin eklendiğini göreceğiz. Properties kısmında  aşağıdaki değişiklileri yapıp OK butonuna tıklıyoruz. Asenkron seçmemizin  sebebi sayfamızın yeniden yüklenmeden değişikliklerin görüntülenmesi.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_009.jpg" width="589" height="421" /></p>
<p align="center">&nbsp;</p>
<p align="center">Yukarıdada görültüğü üzere ControlID özelliğinde btn_ok seçilmiş ve yine  EventName özelliğindede Click eventi seçilmiş. Bunun nedeni ise Trigger  tetiklemesinin Butonumuza tıklandığında olacak olması. Yani Butona  tıklandığında Update Panel içeriği güncellenecek.</p>
<p align="center">Tüm bu işlemleri yaptığımıza göre artık dbye veri girişi yapabiliriz.  Adınızı ve email adresinizi girip Tamam  butonuna bastığınızda Aşağıda bulunan gridview nesnesinin yenilendiğini ve  eklediğiniz verinin burada göründüğünü göreceksiniz. Yani update panel  içeriğinin yenilendiğini görüyoruz. Aşağıda verilen resim ekleme işlemi  yapıldıktan sonra alınan görüntüyü vermektedir.</p>
<p align="center"><img src="http://www.yazgelistir.com/Makaleler/Resimler/1000001473_010.jpg" width="278" height="208" /></p>
<p align="center">&nbsp;</p>
<p>Bu günlük bu kadar  makalemizin devamında UPDATE işlemlerinin nasıl yapılacağını ve QueryString  özelliğini inceleyeceğiz. </p>
<p>{ Mehmet KURT || Yazılım  Geliştirme Uzmanı }<br />
      Mehmet.kurt@mspro.org</p>
<p align="center">&nbsp;</p>
<p align="center">&nbsp;</p>
<p align="center">&nbsp;</p>
</td>
</tr>
</table>
<p></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
                                        </p>
<table id="Table21" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td class="menuLeftCaption" colspan="3">
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/ado-net-ile-mysql-kullanim-ornegi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sql tablomuzdan verilerimiz c# ile i xml olarak almak</title>
		<link>http://www.systemdoktoru.com/2010/04/sql-tablomuzdan-verilerimiz-c-ile-i-xml-olarak-almak/</link>
		<comments>http://www.systemdoktoru.com/2010/04/sql-tablomuzdan-verilerimiz-c-ile-i-xml-olarak-almak/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>

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


                                                    Sql tarafındaki verilerimizi [...]]]></description>
			<content:encoded><![CDATA[</tr>
<tr>
<td colspan="3">
                                                    <span id="lblMakale">Sql tarafındaki verilerimizi c# kullanarak xml olarak dosya oluşturma işlemleri<br />
. </p>
<p>Makalemiz boyunca Okul database kısmındaki öğrenci tablomuz içerisindeki verilerimizi<br />
  alıp bu verilerimizi xml olarak belirlediğimiz yere saklayacağız . </p>
</p>
<p>Okul database imiz için gerekli olan database yapısı aşağıdaki gibidir . </p>
</p>
<p>create database Okul</p>
</p>
<p>use Okul</p>
</p>
<p>create table Ogrenciler </p>
<p>(</p>
<p> id int identity(1,1),</p>
<p> Ad nvarchar(20),</p>
<p> Soyad nvarchar(20),</p>
<p> Adres nvarchar(70),</p>
<p> VeliAdi nvarchar(20),</p>
<p> TelefonNumara nvarchar(20),</p>
<p> EDiplomaNot int,</p>
<p>constraint PK_Ogrenciid primary key(id)</p>
<p>)</p>
</p>
<p>Yukarıdaki tanımlamalarda SQL server tarafında örnek database ve tablomuzu oluşturduk<br />
. Simdi c# tarafında işlemlerimizi gerçekleştirelim. </p>
<p>App.config </p>
</p>
<p> &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;</p>
<p>&lt;configuration&gt;</p>
<p> &lt;connectionStrings&gt;</p>
<p> &lt;add name=&quot;Baglan&quot; connectionString=&quot;data source=.; initial<br />
  catalog = Okul; integrated security = true&quot;/&gt;</p>
<p> &lt;/connectionStrings&gt;</p>
<p>&lt;/configuration&gt;</p>
</p>
<p>Yukarıdaki tanımlamada app.config dosyası oluşturarak database bağlantı yolumuzu<br />
  belirledik . </p>
</p>
<p>C# içerisinde bu bağlantımızı kullanmak için Add Referance kısmından System.Configuration<br />
  uygulamamıza implement etmemiz gerekir . </p>
</p>
<p>Simdi Ogrenci.cs kısmını oluşturalım . bu class olusturmamızın nedeni sql tarafından<br />
  gelen verileri list&lt;&gt; generic bir koleksiyona atarken list&lt;&gt; koleksiyonun<br />
  tipini belirlemek içindir. </p>
</p>
<p>namespace OgrenciSerilestir</p>
<p>{</p>
<p> [Serializable ]</p>
</p>
<p> public class Ogrenci</p>
</p>
<p>Ogrenci class ımıza başlamadan önce Ogrenci class ımızı public olarak belirlememiz<br />
  ve </p>
<p>[Serializable] seklinde bildirmemiz gerekir. </p>
</p>
<p>Ogrenci.cs </p>
</p>
<p>string _ad, _soyad, _adres, _veliadi, _telno;</p>
<p> int _diplomanot;</p>
</p>
<p> public string Ad</p>
<p> {</p>
<p> get{return this._ad;}</p>
<p> set{this._ad = value;}</p>
<p> }</p>
</p>
<p> public string Soyad</p>
<p> {</p>
<p> get { return this._soyad; }</p>
<p> set { this._soyad = value; }</p>
<p> }</p>
</p>
<p> public string Adres</p>
<p> {</p>
<p> get { return this._adres; }</p>
<p> set { this._adres = value; }</p>
<p> }</p>
</p>
<p> public string VeliAdi</p>
<p> {</p>
<p> get { return this._veliadi; }</p>
<p> set { this._veliadi = value; }</p>
<p> }</p>
</p>
<p> public string TelefonNumarasi</p>
<p> {</p>
<p> get { return this._telno; }</p>
<p> set { this._telno = value; }</p>
<p> }</p>
</p>
<p> public int DiplomaNot</p>
<p> {</p>
<p> get { return this._diplomanot; }</p>
<p> set { this._diplomanot = value; }</p>
<p> }</p>
</p>
<p> Yukarıdaki tanımlamalarda kapsülleme kullanarak değişkenlerimiz ve veri akışı<br />
  kısmını kapsül ledik. Bunu yapmamızın nedeni ilerde verinin burada bir şekilde<br />
  kontrol edilme istegine cevap vermek adına ileriye yönelik bir çalışmadır .
</p>
</p>
<p> public Ogrenci()</p>
<p> {</p>
</p>
<p> }</p>
</p>
</p>
<p> public Ogrenci(string ad, string soyad, string adres , string veliad, string<br />
  telno, int Dnot)</p>
<p> {</p>
<p> this.Ad = ad; this.Soyad = soyad; this.Adres = adres; this.VeliAdi = veliad;<br />
  this.TelefonNumarasi = telno; this.DiplomaNot = Dnot;</p>
<p> }</p>
</p>
<p>İki adet yapıcı metot tanımlaması gerçekleştirdik. ilk yapıcı metodumuz bos<br />
  olarak belirledik bunun nedeni xml olarak serileştireceğimiz zaman bir adet<br />
  boş yapıcı metot a ihtiyaç duymasıdır. Bu kısım çok önemlidir. Tüm kodlarımız<br />
  doğru bile olsa eğer boş bir yapıcı metot tanımlamadı isek yordamımız çalışmayacaktır.
</p>
</p>
<p>Ardından normal yapıcı metodumuzu oluşturarak tipimize gelen verilerimizi property<br />
  tanımlamalarımızı kullanarak aktardık. </p>
</p>
<p> public override string ToString()</p>
<p> {</p>
<p> return string.Format(&quot;Adı : {0} Soyadi : {1} Adres {2} Veli Adi {3} Telefon<br />
  Numarasi {4} Diploma notu {5}&quot;, Ad, Soyad, Adres, VeliAdi, TelefonNumarasi,<br />
  DiplomaNot);</p>
<p> }</p>
</p>
<p>ToString () metodunu ezdik buradaki amacımız ise ToString() gibi hazır bir<br />
  metodumuz var diye düşünüp bu metodu bilgi ver seklinde kullanma isteğimizdir.
</p>
</p>
<p>Yardimci.cs : bu class ımız bağlantı işlemlerimiz verileri aktarma ve xml ile<br />
  işleme kısmının bulunduğu kısımdır. </p>
</p>
<p>Kullandığımız isim alanları ve açıklamaları. </p>
</p>
<p>using System.Data.SqlClient; &#8212; Database ile işlemler yapmak için</p>
</p>
<p>using System.Configuration; &#8212; Olusturduğumuz app.config bağlantı ayar dosyamızı<br />
  connectionString olarak tanımlamak için </p>
</p>
<p>using System.IO; &#8212; Xml dosya olusturmak icin vericegimiz yol tanımını almak<br />
  ve olusturmak için kısacası dosyalama işlemleri için . </p>
</p>
<p>using System.Xml.Serialization; &#8212; Adından da anlaşılacağı gibi xml olarak<br />
  serilestirme işlemi icin gerekli olan kısım </p>
</p>
<p> SqlConnection con;</p>
<p> SqlCommand cmd;</p>
</p>
<p>Tanımlamamızda namespace kısmında SqlConnection ve SqlCommand tipinde iki adet<br />
  değişken olurduk tüm class içinde ihtiyaç duyduğumuz an çağırmak için en tepede<br />
  yani namespace kısmında belirledik . </p>
</p>
<p> public Yardimci()</p>
<p> {</p>
<p> con = new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;Baglan&quot;].ConnectionString);</p>
<p> }</p>
</p>
<p>Yardimci Kullan = new Yardimci () seklinde bir örnekleme kısmı olduğu zaman<br />
  yukarıdaki yapıcı metot çalışacaktır ve bağlantı yolumuzu köprülenecektir. </p>
</p>
<p>Bağlantı tanımlamamızda kullandığımız ConfigurationManager.ConnectionStrings[&quot;Baglan&quot;].ConnectionString<br />
  tanımlamasında Syste.Configuration namespace ini en basta using ile uygulamamıza<br />
  belirttiğimiz için direk olarak eristik app.config kısmında tanımladığımız yol<br />
  tanımını string olarak belirlememizi sağladı bunun amacı pek çok yerde yol bağlantı<br />
  ayarlarını almak ve kullanmak zorunda isek bu şekilde app.config içerisine tanımlama<br />
  yapılarak connection name(ConnectionStrings[&quot;Baglan&quot;] ) ismi ile çağrılabilinir<br />
  bu şekilde herhangi bir değişim olduğu zaman merkezi olarak yönetilebilirliği<br />
  sağlamak amacı ile yapılmıştır. </p>
</p>
<p>void BaglantiYonetimi()</p>
<p> {</p>
<p> if (con.State == System.Data.ConnectionState.Open)</p>
<p> {</p>
<p> con.Close();</p>
<p> }</p>
<p> else</p>
<p> {</p>
<p> con.Open();</p>
<p> }</p>
<p> }</p>
</p>
<p>Yordamımız içerisinde bağlantımızı pek çok kez açmak ve kapamak isteyebiliriz<br />
  ve doğal olarak en son bağlantımızı nasıl bıraktığımızı hatırlamak için kodumuzun<br />
  ilgili yerine bakmak zorunda kalırız . Bunu önlemek amacı ile BaglantiYonetimi<br />
  adında bir private metot kullanarak bağlantı durumunu if yapısını kullanarak<br />
  kontrol ettirip acık ise kapatılmasını kapalı ise açılmasını metot olarak yazmak<br />
  bize çalışma zamanında rahat bir yapı kazandıracaktır. Burada bağlantının durumları<br />
  Open ve Close ile sınırlı değildir. Bir çok durum için bu yapıyı daha da dallandırarak<br />
  kullanabiliriz. </p>
</p>
<p>public List&lt;Ogrenci&gt; OgrencileriAl()</p>
<p> {</p>
<p> List&lt;Ogrenci&gt; ogrencilerim = new List&lt;Ogrenci&gt;();</p>
<p> cmd = new SqlCommand(&quot;select Ad,Soyad,Adres,VeliAdi,TelefonNumara,EDiplomaNot<br />
  from Ogrenciler&quot;, con);</p>
<p> BaglantiYonetimi();</p>
</p>
<p> SqlDataReader dr = cmd.ExecuteReader();</p>
</p>
<p> while (dr.Read())</p>
<p> {</p>
<p> ogrencilerim.Add(new Ogrenci(dr[&quot;Ad&quot;].ToString(), dr[&quot;Soyad&quot;].ToString(),<br />
  dr[&quot;Adres&quot;].ToString(), dr[&quot;VeliAdi&quot;].ToString(), dr[&quot;TelefonNumara&quot;].ToString(),<br />
  (int)dr[&quot;EDiplomaNot&quot;]));</p>
<p> }</p>
</p>
<p> BaglantiYonetimi();</p>
</p>
<p> return ogrencilerim;</p>
<p> }</p>
</p>
<p>OgrencileriAl metodumuzu kullanarak database ilgili tabloya bağlanıp verilerimizi<br />
  çekeriz ve bunları daha önceden oluşturduğumuz ogrenci tipine koleksiyona değer<br />
  olarak belirterek içerisine aktarırız List&lt;ogrenci&gt; seklinde . </p>
</p>
<p>Simdi metodumuzu biraz açıklayalım  </p>
</p>
<p>1 . List&lt;Ogrenci&gt; ogrencilerim = new List&lt;Ogrenci&gt;(); şeklinde<br />
  bir list&lt;&gt; generic koleksiyon oluşturduk ve bu list generic koleksiyonumuzun<br />
  sadece öğrenci tipi veya bu tip den türetilmiş tipleri kabul etmesini istediğimizi<br />
  belirledik ama biz bu uygulamada herhangi bir kalıtım kullanmadığımız için burada<br />
  öğrenci tipi için geçerlidir. </p>
</p>
<p>2. cmd = new SqlCommand(&quot;select Ad,Soyad,Adres,VeliAdi,TelefonNumara,EDiplomaNot<br />
  from Ogrenciler&quot;, con);</p>
</p>
<p>BaglantiYonetimi();</p>
</p>
<p>Cmd sqlcommand içerisine tsql komutumuzu yazdık normal şartlarda bu şekilde<br />
  tsql kodun uygulama içerisine yazılması önerilmez bunun yerine ogrencilerilistele<br />
  adında bir procedure SQL tarafında oluşturulur ve bu procedure nin geri dönüş<br />
  değerlerine göre yakalanıp uygulamaya aktarılır ama bizim amacımız burada xml<br />
  olarak serileştirme işlemini anlatmak bir başka makalemde bu kısma detaylı olarak<br />
  değineceğiz derinlemesine araştıracağız!</p>
</p>
<p>BaglantiYonetimi metodumuzu kullanarak bağlantımızı kontrol ettik bu durumda<br />
  bağlantımızı hiç open etmediğimiz için bağlantımız açılacaktır. </p>
</p>
<p>3 . SqlDataReader dr = cmd.ExecuteReader();</p>
</p>
<p>SqlDataReader tipinden dr adında bir değişken belirledik ve cmd sqlcommand<br />
  mızı execute.read() komutunu vererek sql sorgumuzun tüm sonucunu dr attık .<br />
  SqlDataReader kamyon gibi düşüne bilirsiniz tüm verileri yüklendi ama bu verileri<br />
  bir baksa yere boşaltmadan kullanamayız SqlDataReader sadece verileri gider<br />
  alır gelir. Bağlantımızı köprü SqlDataReader ımızıda kamyon gibi düşünün . </p>
</p>
<p>4 . while (dr.Read())</p>
<p> {</p>
<p> ogrencilerim.Add(new Ogrenci(dr[&quot;Ad&quot;].ToString(), dr[&quot;Soyad&quot;].ToString(),<br />
  dr[&quot;Adres&quot;].ToString(), dr[&quot;VeliAdi&quot;].ToString(), dr[&quot;TelefonNumara&quot;].ToString(),<br />
  (int)dr[&quot;EDiplomaNot&quot;]));</p>
<p> }</p>
</p>
<p> BaglantiYonetimi();</p>
</p>
<p> return ogrencilerim;</p>
<p> }</p>
</p>
<p>While döngüsünü kullanarak Sqldatareader tipindeki dr değişkenimizin son satırına<br />
  kadar döngümüzü çalışmasını sağladık . </p>
<p>Şimdi kamyonumuzdaki ( SqldataReader ) içerisindeki verilerimizi List&lt;ogrenci&gt;<br />
  tipindeki öğrencilerim koleksiyonuna ekleme sırası geldi ve öğrencilerim.add(<br />
  dr[Ad].toString() seklinde tüm kolonlarımızı yazarak koleksiyonumuza ekledik<br />
  ve daha sonra bağlantı yönetimi metodumuzu kullanarak bağlantımızı kapattık<br />
  . </p>
</p>
<p>Burada önemli olan tek kural bağlantıyı ihtiyacımız olduğu zaman açmak işimiz<br />
  bittiği zaman kapatmak olacaktır . bu şekilde çalışır isek yordamımız için daha<br />
  fazla güç harcanmaz. </p>
</p>
<p>Return ogrencilerim ile metodumuz dışına koleksiyonumuzu aktardık. </p>
</p>
<p>5 . public void XmlSerilestir(List&lt;Ogrenci&gt; GelenOgrenciler, string Path)</p>
<p> {</p>
<p> XmlSerializer seriliazer = new XmlSerializer(typeof(List&lt;Ogrenci&gt;));</p>
<p> FileStream YolTanimi = new FileStream(Path, FileMode.Create);</p>
<p> seriliazer.Serialize(YolTanimi, GelenOgrenciler);</p>
<p> YolTanimi.Close();</p>
<p> Console.WriteLine(&quot;Basarili Oldu&quot;);</p>
<p> }</p>
</p>
<p>Ve xml serileştirme metodumuz. metodumuz bizden List&lt;ogrenci&gt; tipinden<br />
  GelenOgrenciler ve string tipinden Path tanımı istemektedir. </p>
</p>
<p>XmlSerializer seriliazer = new XmlSerializer(typeof(List&lt;Ogrenci&gt;));<br />
  kısmında örneklememizi yaptık . </p>
</p>
<p>FileStream YolTanimi = new FileStream(Path, FileMode.Create); filestream ile<br />
  bir kanal açtık ve Path tanımına gelen c:ogrenci.xml adı için filemode.create<br />
  kısmında adı verilen yola adı verilen dosyayı açma kısmını tanımladık . </p>
</p>
<p>seriliazer.Serialize(YolTanimi, GelenOgrenciler); bölümünde xml çevirme işlemimiz<br />
  tamamlanmıştır. Artık tek yapmamız gereken </p>
<p>YolTanimi.Close();</p>
<p>İle kanalımızı kapatmak tır. </p>
</p>
<p>Makalemiz boyunca sql server tarafında bir tabloya bağlanarak bilgileri alıp<br />
  xml e çevirme işlemi anlatılmıştır . </p>
</p>
<p>Umarım yararı olmuştur . </p>
</p>
<p></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
                                        </p>
<table id="Table21" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td class="menuLeftCaption" colspan="3">
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/sql-tablomuzdan-verilerimiz-c-ile-i-xml-olarak-almak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Excel ve ADO.NET</title>
		<link>http://www.systemdoktoru.com/2010/04/excel-ve-ado-net/</link>
		<comments>http://www.systemdoktoru.com/2010/04/excel-ve-ado-net/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:57:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Excel]]></category>

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


                                                    
Excel ve Ado.Net
&#160;
Bu [...]]]></description>
			<content:encoded><![CDATA[</tr>
<tr>
<td colspan="3">
                                                    <span id="lblMakale">
<div align="center"><span style="font-size: medium;"><b>Excel ve Ado.Net</b></span></div>
<div align="center">&nbsp;</div>
<div><span style="">Bu yazimda Ado.Net ile Excel&rsquo;i aynen veritabani gibi kullanip veri getirme y&ouml;ntemine deginecegiz.</span></div>
<div>&nbsp;</div>
<div><span style="">Klasik y&ouml;ntemlerle excelden veri okumak ve yazmak ugrastirici olablmektedir ama Ado.Net&rsquo;e hakimseniz bir iki ufak noktaya dikkat ederek, Ado.Net ile Excel&rsquo;de veri okuma, veri ekleme ve g&uuml;ncelleme &ccedil;ok kolay hale gelmektedir. </span></div>
<div>&nbsp;</div>
<div><span style="">Simdi ise koyulalim.</span></div>
<div>&nbsp;</div>
<div><b><span style="">1.Adim:</span></b><span style=""> Bir adet Visual Studio Projesi olusturunuz.</span></div>
<div>&nbsp;</div>
<div><b><span style="">2.Adim:</span></b><span style=""> Bir adet Excel D&ouml;k&uuml;mani olusturun ve adini deneme.xls (deneme.xlsx) birakin. Bu excel dosyasini&nbsp;Visual Studio projenizin debug klas&ouml;r&uuml;n&uuml;n i&ccedil;erisine birakiniz. </span></div>
<div>&nbsp;</div>
<div><b><span style="">3.Adim:</span></b><span style=""> Form1&rsquo;e 1 adet DataGridView, 3 adet Button ekleyiniz.</span></div>
<div>&nbsp;</div>
<div><b><span style="">4.Adim:</span></b><span style=""> Projenizde Project/Add Class ile bir adet class olusturunuz. Ben ismini Class1 olarak biraktim.</span></div>
<div>&nbsp;</div>
<div><b><span style="">5.Adim:</span></b><span style=""> Class1.cs sayfasini a&ccedil;iniz ve i&ccedil;erisine asagidaki kodlari ekleyiniz.</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">Eger Excel 2007 kullaniyorsaniz connection stringi asagidaki bi&ccedil;imde d&uuml;zeltiniz.<br />
</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">OleDbConnection</span><span style=""> baglanti = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">OleDbConnection</span>(<span style="color: rgb(163, 21, 21);">&quot;Data Source=deneme.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0&quot;</span>);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">using</span><span style=""> System;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">using</span><span style=""> System.Collections.Generic;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">using</span><span style=""> System.Linq;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">using</span><span style=""> System.Text;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">using</span><span style=""> System.Data.OleDb; <b>//Sizde Ekleyiniz.</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">using</span><span style=""> System.Data; <b>//Sizde Ekleyiniz.</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">namespace</span><span style=""> WindowsFormsApplication9</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">{</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp; <span style="color: blue;">class</span> <span style="color: rgb(43, 145, 175);">Class1</span></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175);">OleDbConnection</span> baglanti = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">OleDbConnection</span>(<span style="color: rgb(163, 21, 21);">&quot;Data Source=deneme.xls;Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0&quot;</span>);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175);">OleDbCommand</span> komut;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: rgb(43, 145, 175);">DataTable</span> ExcelVerileriniGetir() <b>//Veri Okuma</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">OleDbCommand</span>(<span style="color: rgb(163, 21, 21);">&quot;select * from [Sayfa1$]&quot;</span>,baglanti);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (baglanti.State == <span style="color: rgb(43, 145, 175);">ConnectionState</span>.Closed)</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;baglanti.Open();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175);">OleDbDataReader</span> oku = komut.ExecuteReader();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175);">DataTable</span> dt = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">DataTable</span>();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt.Load(oku);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> dt;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">void</span> KayitYap(<span style="color: blue;">string</span> adi,<span style="color: blue;">string</span> soyadi) <b>//Yeni Kayit Ekleme</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">OleDbCommand</span>(<span style="color: rgb(163, 21, 21);">&quot;insert into [Sayfa1$] values (@adi,@soyadi)&quot;</span>, baglanti);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut.Parameters.Add(<span style="color: rgb(163, 21, 21);">&quot;@deger1&quot;</span>,<span style="color: rgb(43, 145, 175);">OleDbType</span>.VarChar,50).Value=adi;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut.Parameters.Add(<span style="color: rgb(163, 21, 21);">&quot;@deger2&quot;</span>, <span style="color: rgb(43, 145, 175);">OleDbType</span>.VarChar, 50).Value = soyadi;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (baglanti.State == <span style="color: rgb(43, 145, 175);">ConnectionState</span>.Closed)</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baglanti.Open();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut.ExecuteNonQuery();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">void</span> KayitGuncelle(<span style="color: blue;">string</span> DegisecekAd,<span style="color: blue;">string</span> DegistirilecekAd) <b>//Kayit G&uuml;ncelleme</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><b><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="">{</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">OleDbCommand</span>(<span style="color: rgb(163, 21, 21);">&quot;update [Sayfa1$] set ADI=@DegisecekAd where ADI=@DegistirilecekAd&quot;</span>, baglanti);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut.Parameters.Add(<span style="color: rgb(163, 21, 21);">&quot;@DegisecekAd&quot;</span>, <span style="color: rgb(43, 145, 175);">OleDbType</span>.VarChar, 50).Value = DegisecekAd;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut.Parameters.Add(<span style="color: rgb(163, 21, 21);">&quot;@DegistirilecekAd&quot;</span>, <span style="color: rgb(43, 145, 175);">OleDbType</span>.VarChar, 50).Value = DegistirilecekAd;</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (baglanti.State == <span style="color: rgb(43, 145, 175);">ConnectionState</span>.Closed)</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baglanti.Open();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; komut.ExecuteNonQuery();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">}</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div><span style="">Burada t&uuml;m kullanim normal veri tabanlarina benzemektedir. Dikkat etmeniz gereken nokta yani normal veritabanlarindan farklilik g&ouml;steren noktalar; </span></div>
<div>&nbsp;</div>
<ul>
<li><span style="">Connection String de ki <b>Extended Properties</b> &ouml;zelligi, </span></li>
<li><span style="">OledbCommand nesnesindeki sql komutunda excel sayfalarinin &ldquo;[]&rdquo; i&ccedil;erisine konulup sayfa isminin sonuna &ldquo;$&rdquo; isareti getirilmesidir. Bizde [Sayfa1$] seklinde olduguna dikkat ediniz.</span></li>
</ul>
<div><span style="">Simdi formunuza gelerek her bir butonun Click Eventine;&nbsp;&nbsp; </span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 128);">Class1 </span><span style="">yeni = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">Class1</span>();</span><span style=""><b> //Class1 den yavru degisken t&uuml;retildi.</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(51, 102, 255);">private </span><span style=""><span style="color: blue;">void</span> button1_Click(<span style="color: blue;">object</span> sender, <span style="color: rgb(43, 145, 175);">EventArgs</span> e)</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.DataSource = yeni.ExcelVerileriniGetir();</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>//Veriler DatagridView&rsquo;e aktarildi.</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> button2_Click(<span style="color: blue;">object</span> sender, <span style="color: rgb(43, 145, 175);">EventArgs</span> e)</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yeni.KayitYap(<span style="color: rgb(163, 21, 21);">&quot;G&uuml;lser&quot;</span>,<span style="color: rgb(163, 21, 21);">&quot;Demirog&quot;</span>);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>//Yeni Kayit ekleniyor.</b></span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;">&nbsp;</div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> button3_Click(<span style="color: blue;">object</span> sender, <span style="color: rgb(43, 145, 175);">EventArgs</span> e)</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yeni.KayitGuncelle(<span style="color: rgb(163, 21, 21);">&quot;G&ouml;zde&quot;</span>,<span style="color: rgb(163, 21, 21);">&quot;Nafiye&quot;</span>);</span></div>
<div style="margin-bottom: 0.0001pt; line-height: normal;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>//Kayit G&uuml;ncceleme islemi,Nafiye isimleri G&ouml;zde oldu.</b></span></div>
<div><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div>&nbsp;</div>
<div><span style="">Diger yazilarimda g&ouml;r&uuml;smek &uuml;zere.</span></div>
<div>&nbsp;</div>
<div><span style="font-size: small;"><strong>Engin Demiroğ </strong><br />
</span></div>
<div><span style="font-size: small;"><strong>MCSE-MCSD.NET</strong></span><span style="font-size: medium;"><strong><br />
</strong></span></div>
<div>engin@e-learner.net</div>
<div><a href="http://www.yazilimdevi.com" target="_blank"><strong>www.yazilimdevi.com</strong></a></div>
<p></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
                                        </p>
<table id="Table21" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td class="menuLeftCaption" colspan="3">
]]></content:encoded>
			<wfw:commentRss>http://www.systemdoktoru.com/2010/04/excel-ve-ado-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

