﻿
{"id":204,"date":"2012-03-16T21:49:40","date_gmt":"2012-03-16T21:49:40","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=204"},"modified":"2012-04-25T07:22:01","modified_gmt":"2012-04-25T07:22:01","slug":"ado-net-disconnected-mimari-sqldataadapter-ayrintili-anlatim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/ado-net-disconnected-mimari-sqldataadapter-ayrintili-anlatim\/","title":{"rendered":"ADO.NET Disconnected Mimari-SqlDataAdapter Ayr\u0131nt\u0131l\u0131 Anlat\u0131m"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda SqlDataAdapter nesnesine ayr\u0131nt\u0131l\u0131 bir giri\u015f yapaca\u011f\u0131z.Bir \u00f6nceki yaz\u0131mda y\u00fczeysel olarak de\u011finmi\u015ftim.\u00d6ncelikle SqlDataAdapter nesnesinden bahsedelim.<br \/>\n<!--more--> <strong><span style=\"color: #ff0000;\">SqlDataAdapter Nesnesi<\/span><\/strong><br \/>\n\u0130\u00e7ine yaz\u0131lan select sorgusuna g\u00f6re otomatik olarak insert,update ve delete sorgular\u0131n\u0131 yazan bir kontrold\u00fcr.Bu kontrol\u00fc kullan\u0131rken ba\u011flant\u0131y\u0131 a\u00e7\u0131p kapatmaya gerek yoktur.Kendisi a\u00e7\u0131p i\u015fi bitti\u011finde kapat\u0131r.Sorguya g\u00f6re tablo veya tablolar\u0131n hepsini \u00e7eker ve bunlar\u0131 DataSet ya da DataTable gibi nesnelere y\u00fckleyebilmemizi sa\u011flar.<br \/>\nBu yaz\u0131mdan sonra DataGridView nesnesinin kullan\u0131m\u0131yla ilgili yaz\u0131 haz\u0131rlayaca\u011f\u0131m.\u015eimdilik DataGridView in nas\u0131l kullan\u0131ld\u0131\u011f\u0131yla ilgili bir fikriniz olmasada \u00f6rnek olarak bu kontrol\u00fc verece\u011fim.DataGridView&#8217;e ba\u011fl\u0131 olan DataTable \u00fczerinden yapt\u0131\u011f\u0131m\u0131z de\u011fi\u015fiklikler(insert,update ve delete) fiziksel tabloya yans\u0131mayacakt\u0131r.RAM de olu\u015fturulan tabloda de\u011fi\u015fiklikler yap\u0131lacak ve \u00f6ylede kalacakt\u0131r.Bu de\u011fi\u015fiklikleri fiziksel tabloya yans\u0131tma \u00f6zelli\u011fi SqlDataAdapter nesnesinde vard\u0131r.Ancak SqlDataAdapter nesnesinin InsertCommand,UpdateCommand ve DeleteCommand \u00f6zellikleri i\u00e7in gerekli sorgular olu\u015fturulmal\u0131d\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            SqlConnection baglanti = new SqlConnection(&quot;server=GEN\u00c7AY-GEN\u00c7AY;database=northwind;trusted_connection=true;&quot;);\r\n            SqlDataAdapter dta = new SqlDataAdapter(&quot;select * from Personeller&quot;,baglanti);\r\n            DataTable dt=new DataTable(&quot;Personeller&quot;);\r\n            dta.Fill(dt);\r\n<\/pre>\n<p>Yukarda SqlDataAdapter nesnesini tan\u0131mlad\u0131k.\u015eunada de\u011finmek isterim ki SqlDataAdapter nesnesinin i\u00e7ine select sorgusundan ba\u015fka bi\u015fey yazamazs\u0131n\u0131z.Select sorgusuda otomatikman SelectCommand \u00f6zelli\u011fine yaz\u0131l\u0131yor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            dta.InsertCommand = &quot;insert into..&quot;;\r\n            dta.DeleteCommand = &quot;delete from ..&quot;;\r\n            dta.UpdateCommand = &quot;update ..&quot;;\r\n<\/pre>\n<p>\u015eimdi bu \u00f6zellikler i\u00e7in gerekli sorgular\u0131 oturup elimizle manuel olu\u015fturmayaca\u011f\u0131z.\u00c7\u00fcnk\u00fc SqlDataAdapter nesnesi kendisi otomatikman bu sorgular\u0131 olu\u015fturabiliyor.Bunu olu\u015fturabilmesi i\u00e7in SqlCommandBuilder s\u0131n\u0131f\u0131ndan yard\u0131m al\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            SqlCommandBuilder cmdb = new SqlCommandBuilder(dta);\r\n              ya da\r\n            SqlCommandBuilder cmdb = new SqlCommandBuilder();\r\n            cmdb.DataAdapter = dta;\r\n<\/pre>\n<p>Art\u0131k SqlCommandBuilder s\u0131n\u0131f\u0131 sayesinde InsertCommand,DeleteCommand ve UpdateCommand \u00f6zelliklerine sorgular yaz\u0131lm\u0131\u015ft\u0131r.<br \/>\nArt\u0131k bu sorgular yaz\u0131ld\u0131\u011f\u0131na g\u00f6re herhangi bir delete,update ya da insert i\u015flemi olursa bu SqlDataAdapter sayesinde i\u00e7indeki tabloyu g\u00fcncellememiz gerekecektir.<br \/>\nBunuda SqlDataAdapter nesnesinin Update() metodu sayesinde yap\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n       dta.Update(dt);\r\n<\/pre>\n<p>Art\u0131k SqlDataAdapter nesnesi sayesinde veritaban\u0131m\u0131za i\u015flem yapabiliyoruz.<br \/>\nDataTable daki her bir sat\u0131r\u0131n DataRowVersion isimli \u00f6zelli\u011finde o sat\u0131r\u0131n durumu saklan\u0131r.Bu durumlar Unchanged,deleted,inserted ya da modified dir.DataGridView \u00fczerinde yapt\u0131\u011f\u0131m\u0131z i\u015flemler asl\u0131nda DataTable \u00fczerinde yapt\u0131\u011f\u0131m\u0131z i\u015flemlerdir.Dolay\u0131s\u0131yla bir i\u015flem yap\u0131ld\u0131\u011f\u0131nda DataTable in DataRowVersion&#8217;lar\u0131n\u0131 de\u011fi\u015ftirecektir.<br \/>\nUpdate() metodu \u00e7al\u0131\u015ft\u0131\u011f\u0131nda,metoda verilen DataTable in DataRowVersion&#8217;lar\u0131 kontrol edilecektir.E\u011fer modifed ise nesnenin UpdateCommand&#8217;\u0131,deleted ise nesnenin DeleteCommand&#8217;\u0131 ya da inserted ise nesnenin InsertCommand&#8217;\u0131 \u00e7al\u0131\u015ft\u0131r\u0131larak veriler fiziksel tabloya kaydedilecektir.<br \/>\nDikkat!!!<br \/>\nE\u011fer DataTable i\u00e7indeki tablo ba\u015fka tablolar ile ili\u015fkili ise bu durumda ili\u015fkili kay\u0131tlarla \u00e7al\u0131\u015fabilmek i\u00e7in o tablonun primary key ve foreign key yap\u0131lar\u0131n\u0131n da SqlDataAdapter ile \u00e7ekilirken verilmesi gerekir.<br \/>\nYukar\u0131daki &#8220;select * from personeller&#8221; sorgusu bu keyleri getirmez.E\u011fer keylerde gelsin istiyorsak bu durumda a\u015fa\u011f\u0131daki s\u0131n\u0131f\u0131 kullanmam\u0131z gerekiyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n       dta.MissingSchemaAction = MissingSchemaAction.AddWithKey;\r\n<\/pre>\n<p>Yukardaki komut,referans ad\u0131 dta olan SqlDataAdapter tipindeki nesnenin SelectCommand&#8217;\u0131ndaki gelen tablonun keylerinide getir demektir.<br \/>\nBu yaz\u0131mda burda sona eriyor..Bir sonraki yaz\u0131mda DataGridView anlat\u0131m\u0131 yapaca\u011f\u0131m.Kesinlikle okuyun :).\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 SqlDataAdapter nesnesine ayr\u0131nt\u0131l\u0131 bir giri\u015f yapaca\u011f\u0131z.Bir \u00f6nceki yaz\u0131mda y\u00fczeysel olarak de\u011finmi\u015ftim.\u00d6ncelikle SqlDataAdapter nesnesinden bahsedelim.<!-- 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,140,139,138],"class_list":["post-204","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","category-veritabani","tag-ado-net","tag-datagridview","tag-disconnected","tag-sqldataadapter"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/204","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=204"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/204\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}