﻿
{"id":202,"date":"2012-03-15T22:26:50","date_gmt":"2012-03-15T22:26:50","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=202"},"modified":"2012-04-25T07:22:39","modified_gmt":"2012-04-25T07:22:39","slug":"ado-net-disconnected-mimari-sqldataadapterdataset-ve-datatable-nesneleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/ado-net-disconnected-mimari-sqldataadapterdataset-ve-datatable-nesneleri\/","title":{"rendered":"ADO.NET Disconnected Mimari &#8211; SqlDataAdapter,DataSet Ve DataTable Nesneleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda ADO.NET te Disconnected Mimarye giri\u015f yapaca\u011f\u0131z.Disconnected mimaride veritaban\u0131yla pek ili\u015fkimiz yoktur.Connected mimaride oldu\u011fu gibi manuel olarak ba\u011flant\u0131y\u0131 a\u00e7\u0131p kapatmam\u0131za gerek yoktur.SqlDataAdapter nesnesi bu i\u015fi otomatik olarak yapmaktad\u0131r.\u015eimdi nesneleri tan\u0131t\u0131p \u00f6rnek yapal\u0131m.<br \/>\n<!--more--><br \/>\n<span style=\"color: #ff0000;\"><strong>SqlDataAdapter Nesnesi<\/strong><\/span><br \/>\nSqlCommand nesnesi gibi verilen ba\u011flant\u0131 \u00fczerine sorguyu \u00e7al\u0131\u015ft\u0131r\u0131r.Ba\u011flant\u0131y\u0131 a\u00e7\u0131p kapatmaya gerek yoktur.Kendisi bu i\u015flemi otomatik yapar.Biz ona select sorgusu veririz, o bu select sorgusuna g\u00f6re insert,update ve delete sorgular\u0131n\u0131 otomatik olarak olu\u015fturur.Daha sonra SqlDataAdapter metodlar\u0131n\u0131 kullanarak bu sorgular\u0131 \u00e7al\u0131\u015ft\u0131rabiliriz.<\/p>\n<p><strong><span style=\"color: #ff0000;\">DataSet Nesnesi\u00a0<\/span><\/strong><br \/>\nBellekte veritaban\u0131na benzer bir yap\u0131 olu\u015fturur.Bu yap\u0131 i\u00e7inde DataTable&#8217;lar saklayabiliriz.Default olarak i\u00e7inde bir adet DataTable vard\u0131r.\u0130\u00e7indeki DataTable&#8217;ler DataSet&#8217;in Tables koleksiyonunda saklan\u0131r.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>DataTable Nesnesi\u00a0<\/strong><\/span><br \/>\nBellekte veritaban\u0131 tablosu yap\u0131s\u0131nda bir yap\u0131 olu\u015fturur.<\/p>\n<p>\u015eimdi formumuza bir ComboBox kontrol\u00fc koyal\u0131m ve Northwind tablosundaki Ad ve Soyadlar\u0131 bu ComboBox\u0131n i\u00e7ine \u00e7ekelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n SqlConnection baglanti = new SqlConnection();\r\n            baglanti.ConnectionString = &quot;server=GEN\uffc7AY-GEN\uffc7AY;database=northwind;trusted_connection=true;&quot;;\r\n            SqlDataAdapter dta = new SqlDataAdapter(&quot;select Adi + ' ' + Soyadi as isim from Personeller&quot;,baglanti);\r\n            DataSet ds = new DataSet();\r\n            dta.Fill(ds,&quot;Personeller&quot;);\r\n            comboBox1.DataSource=ds.Tables&#x5B;&quot;Personeller&quot;];\r\n            comboBox1.DisplayMember = &quot;isim&quot;;\r\n            comboBox1.ValueMember = &quot;PersonelId&quot;;\r\n<\/pre>\n<p>Yukardaki kodlar\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z zaman ComboBox kontrol\u00fcne Ad ve Soyad\u0131n eklendi\u011fini g\u00f6rece\u011fiz.Tabi &#8220;Gen\u00e7ay Y\u0131ld\u0131z&#8221; \u015feklinde eklenmesi i\u00e7in sorgumuzu ona g\u00f6re ayarl\u0131yoruz.\u015eimdi kodlardaki yap\u0131lar\u0131 izah edeyim;<br \/>\nSqlDataAdapter dta = new SqlDataAdapter(&#8220;select Adi + &#8216; &#8216; + Soyadi as isim from Personeller&#8221;,baglanti); = SqlCommand gibi sorgumuzu yaz\u0131p , ba\u011flant\u0131m\u0131z\u0131 tan\u0131ml\u0131yoruz.Ba\u011flant\u0131y\u0131 kendisi otomatik a\u00e7\u0131p kapatt\u0131\u011f\u0131ndan biz ba\u011flant\u0131y\u0131 ellemiyoruz.<br \/>\nDataSet ds = new DataSet(); = DataSet nesnesi olu\u015fturuyoruz ki DataAdapter nesnesinden DataSet&#8217;e tablolar\u0131 atabilelim.<br \/>\ndta.Fill(ds,&#8221;Personeller&#8221;); = SqlDataAdapter&#8217;\u0131n Fill() metoduyla DataSet&#8217;e tablolar\u0131 atabiliriz.G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi referans ad\u0131 ds olan DataSet nesnesine veritaban\u0131ndan gelen tablo at\u0131l\u0131yor ve bu tablonun ad\u0131nada &#8220;Personeller&#8221; deniyor.<br \/>\ncomboBox1.DataSource=ds.Tables[&#8220;Personeller&#8221;]; = ComboBox,ListBox vs. gibi kontrollerin DataSource \u00f6zelli\u011fi vard\u0131r.Bu \u00f6zellik sayesinde bu kontrollerin veri kayna\u011f\u0131 olarak neyi baz alaca\u011f\u0131n\u0131 g\u00f6sterebiliyoruz.Bu \u015fekilde,ds.Tables[&#8220;Personeller&#8221;] diyerek, DataSet&#8217;in i\u00e7indeki tablolardan ad\u0131 Personeller olan tabloyu bu nesneye verikayna\u011f\u0131 yap demi\u015f oluyorum.E\u011fer SqlDataAdapter&#8217;\u0131n Fill() metodunu kullan\u0131rken DataSet&#8217;e aktar\u0131lan tabloya &#8220;Personeller&#8221; ismini vermemi\u015f olsayd\u0131m, bu sefer ds.Tables[0] olarak bu tabloyu \u00e7a\u011f\u0131racakt\u0131m.\u00c7\u00fcnk\u00fc yazd\u0131\u011f\u0131m\u0131z sorgu sonucunda bir tane tablo d\u00f6necektir ve o tablonun ismi olsada olmasada index numaras\u0131 0 d\u0131r.<br \/>\ncomboBox1.DisplayMember = &#8220;isim&#8221;; = Burada ise Personeller tablosunda hangi kolonu g\u00f6sterece\u011fini s\u00f6yl\u00fcyoruz.Birden fazla kolon d\u00f6nmesi sonucunda ComboBox t\u00fcr\u00fc nesneler hangilerini nas\u0131l g\u00f6sterece\u011fini bilmedi\u011fi i\u00e7in DisplayMember \u00f6zelli\u011fi ile hangi kolonu g\u00f6stermesi gerekti\u011fini belirtiyoruz.<br \/>\ncomboBox1.ValueMember = &#8220;PersonelId&#8221;; = \u00d6rne\u011fin ben ComboBox&#8217;tan &#8220;Gen\u00e7ay Y\u0131ld\u0131z&#8221; \u0131 se\u00e7iyorum ve bunun sonucunda bana bir de\u011fer d\u00f6nmesini talep ediyorum.&#8221;Gen\u00e7ay Y\u0131ld\u0131z&#8221; isim ve soyisminin PersonelId sini bana ValueMember \u00f6zelli\u011fi sayesinde geliyor.<\/p>\n<p>E\u011fer ComboBox,listBox vs. gibi kontrolleri kullan\u0131yorsan\u0131z SelectedIndexChanged yerine SelectionChangeCommitted olay\u0131n\u0131 kullan\u0131n\u0131z.Bunun sebebi SelectedIndexChanged y\u00fcklenir y\u00fcklenmez \u00e7al\u0131\u015f\u0131rken SelectionChangeCommitted siz t\u0131klad\u0131\u011f\u0131n\u0131z zaman \u00e7al\u0131\u015facakt\u0131r.Bu aksakl\u0131k bazen istenmeyen ufak tefek sorunlara yol a\u00e7abilir.<\/p>\n<p>\u015eimdi DataTable nesnesini de kullanmay\u0131 g\u00f6relim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nSqlConnection baglanti = new SqlConnection();\r\n            baglanti.ConnectionString = &quot;server=GEN\u00c7AY-GEN\u00c7AY;database=northwind;trusted_connection=true;&quot;;\r\n            SqlDataAdapter dta = new SqlDataAdapter(&quot;select Adi + ' ' + Soyadi as isim,PersonelId from Personeller&quot;,baglanti);\r\n            DataSet ds = new DataSet();\r\n            DataTable dt = new DataTable(&quot;Personeller&quot;);\r\n            ds.Tables.Add(dt);\r\n            dta.Fill(ds,&quot;Personeller&quot;);\r\n            comboBox1.DataSource = dt;\r\n            comboBox1.DisplayMember = &quot;isim&quot;;\r\n            comboBox1.ValueMember = &quot;PersonelId&quot;;\r\n<\/pre>\n<p>Yukardaki yap\u0131da ise,DataTable nesnesi olu\u015fturup ad\u0131na &#8220;Personeller&#8221; dedim.Bunu referans ad\u0131 ds olan DataSet nesnesinin Tables koleksiyonuna(koleksiyon oldu\u011fu i\u00e7in Add metodu var) Add() metoduna ekliyorum.SqlDataAdapter nesnesinin Fill() metoduyla DataSet&#8217;ime tabloyu y\u00fcklerken bu sefer DataSet&#8217;imdeki var olan &#8220;Personeller&#8221; tablosunu se\u00e7iyorum.ComboBox&#8217;\u0131n DataSource \u00f6zelli\u011fine DataSet&#8217;imi de\u011fil DataTable&#8217;\u0131m\u0131 ba\u011fl\u0131yorum.Sonu\u00e7ta di\u011fer t\u00fcrl\u00fc DataSet&#8217;in i\u00e7indeki tabloyu g\u00f6stererek ba\u011fl\u0131yordum.Bi\u015fey de\u011fi\u015fmiyor.Geri kalan\u0131 bildi\u011finiz gibi..<\/p>\n<p>Hi\u00e7 DataSet olu\u015fturmadan SqlDataAdapter&#8217;a gelen verileri DataTable&#8217;a atabilirmiyiz diye sorarsan\u0131z e\u011fer evet.SqlDataAdapter nesnesinin Fill() metoduna bu sefer DataSet de\u011fil DataTable nesnemizi yazarsak tablomuz DataTable&#8217;\u0131m\u0131za y\u00fcklenecektir.Mant\u0131ken bunu yaparken sorgumuzdan bir tablo geldi\u011fini bilmemiz gerekiyor.Birden fazla tablo gelirse e\u011fer bu tablolar\u0131 DataTable \u0131m\u0131za de\u011fil,DataSet&#8217;imize atmal\u0131y\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nSqlConnection baglanti = new SqlConnection();\r\n            baglanti.ConnectionString = &quot;server=GEN\u00c7AY-GEN\u00c7AY;database=northwind;trusted_connection=true;&quot;;\r\n            SqlDataAdapter dta = new SqlDataAdapter(&quot;select Adi + ' ' + Soyadi as isim,PersonelId from Personeller&quot;,baglanti);\r\n            DataTable dt = new DataTable();\r\n            dta.Fill(dt);\r\n            comboBox1.DataSource = dt;\r\n            comboBox1.DisplayMember = &quot;isim&quot;;\r\n            comboBox1.ValueMember = &quot;PersonelId&quot;;\r\n<\/pre>\n<p>\u015eimdilik burda keselim.Bir sonraki yaz\u0131mda SqlDataAdapter nesnesini daha detayl\u0131 anlataca\u011f\u0131m.\u0130yi \u00e7al\u0131\u015fmalar.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda ADO.NET te Disconnected Mimarye giri\u015f yapaca\u011f\u0131z.Disconnected mimaride veritaban\u0131yla pek ili\u015fkimiz yoktur.Connected mimaride oldu\u011fu gibi manuel olarak ba\u011flant\u0131y\u0131 a\u00e7\u0131p kapatmam\u0131za gerek yoktur.SqlDataAdapter nesnesi bu i\u015fi otomatik olarak yapmaktad\u0131r.\u015eimdi nesneleri tan\u0131t\u0131p \u00f6rnek yapal\u0131m.<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,22],"tags":[129,137,136,139,138],"class_list":["post-202","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","category-veritabani","tag-ado-net","tag-dataset","tag-datatable","tag-disconnected","tag-sqldataadapter"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/202\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}