﻿
{"id":187,"date":"2012-03-14T22:53:54","date_gmt":"2012-03-14T22:53:54","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=187"},"modified":"2012-04-27T16:46:25","modified_gmt":"2012-04-27T16:46:25","slug":"ado-net-connected-mimari-sqlconnection-nesnesi-ve-app-config-dosyasi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/ado-net-connected-mimari-sqlconnection-nesnesi-ve-app-config-dosyasi\/","title":{"rendered":"ADO.NET Connected Mimari-SqlConnection Nesnesi ve App.config Dosyas\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131m\u0131zda ADO.NET&#8217;e giri\u015f yapaca\u011f\u0131z.Genellikle C# ya da ASP.net ile yazd\u0131\u011f\u0131m\u0131z programlarda database(veritaban\u0131) kullanmaktay\u0131z.Ancak bu programlar\u0131 yazarken veritaban\u0131yla ba\u011flant\u0131 kurmam\u0131z gerekecek, ba\u011flant\u0131 kurdu\u011fumuz veritaban\u0131 \u00fczerinde sorgular \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekebilir.ADO.NET veritaban\u0131yla yap\u0131lacak bu t\u00fcr i\u015fleri ger\u00e7ekle\u015ftiren class lar\u0131 bar\u0131nd\u0131ran bir yap\u0131d\u0131r.<br \/>\n<!--more-->Veritaban\u0131 olarak SQL Server kullanmay\u0131 tercih etti\u011fim i\u00e7in \u00f6ncelikle \u00e7al\u0131\u015fman\u0131za System.Data.SqlClient namespace ini eklemelisiniz.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>SqlConnection Nesnesi<\/strong><\/span><br \/>\nDatabase i\u015flemlerimi yapabilmem i\u00e7in SQL Server a ba\u011fl\u0131 olmam gerekir.Bunu yapacak olan nesne SqlConnection nesnesidir.<br \/>\n\u015eimdi bir tane SqlConnection nesnesi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nSqlConnection baglanti = new SqlConnection(&quot;Server=ServerAd\u0131;database=Veritaban\u0131Ad\u0131;trusted_connection=true;&quot;);\r\n<\/pre>\n<p>Yukar\u0131da baglanti referans\u0131na bir SqlConnection nesnesi tan\u0131mlam\u0131\u015f olduk.Bu nesnenin constructor\u0131na &#8220;Server=ServerAd\u0131;database=Veritaban\u0131Ad\u0131;trusted_connection=true;&#8221; yazd\u0131\u011f\u0131m\u0131z ifade veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 ger\u00e7ekle\u015ftiren prosed\u00fcrd\u00fcr.Server&#8217;a veritaban\u0131m\u0131z\u0131n server\u0131n\u0131,database&#8217;e veritaban\u0131 ismini yazmam\u0131z gerekiyor.<br \/>\nBu prosed\u00fcr\u00fc belirtmenin constructor lardan ba\u015fka yollar\u0131da vard\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nSqlConnection baglanti = new SqlConnection();\r\nbaglanti.ConnectionString = &quot;Server=ServerAd\u0131;database=Veritaban\u0131Ad\u0131;trusted_connection=true;&quot;;\r\n<\/pre>\n<p>Yukarda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi ba\u011flant\u0131 kodlar\u0131n\u0131 ConnectionString \u00f6zelli\u011fine yaz\u0131yoruz.<br \/>\nBurda \u015funada de\u011finmek istiyorum.<br \/>\ntrusted_connection=true; = SQL Server&#8217;a ba\u011flan\u0131rken Windows Authentication ile ba\u011flan demektir.<br \/>\nYukardaki ConnectionString yerine \u015fu da ayn\u0131 Windows Authentication ile ba\u011flanmaya yarar.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nData Source=ServerAd\u0131;Initial Catalog=Veritaban\u0131;Integrated Security=SSPI\r\n<\/pre>\n<p>E\u011fer SQL Server Authentication ile ba\u011flant\u0131 kuracaksak a\u015fa\u011f\u0131daki gibi bir ba\u011flant\u0131 c\u00fcmlesi yazmal\u0131y\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nserver =ServerAd\u0131;database=Veritaban\u0131Ad\u0131;uid=Kullan\u0131c\u0131Ad\u0131;password=Kullan\u0131c\u0131Sifre;trusted_connection=false;\r\n\r\nya da\r\n\r\nData Source=ServerAd\u0131;Initial Catalog=Veritaban\u0131Ad\u0131;User Id=Kullan\u0131c\u0131Ad\u0131;Password=Kullan\u0131c\u0131\u015eifresi;\r\n<\/pre>\n<p>Not : <a href=\"http:\/\/www.connectionstrings.com\" target=\"_blank\">www.connectionstrings.com<\/a> bu sitede kullanabilece\u011finiz connectionstring leri \u00f6\u011frenebilirsiniz.<br \/>\nBunlar\u0131 g\u00f6sterdikten sonra gelelim SqlConnection nesnemize.Hangi server da hangi databaseye ba\u011flanaca\u011f\u0131n\u0131 belirttikten sonra o baglantiyi a\u00e7mam\u0131z gerekiyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbaglanti.Open(); \\\\ Ba\u011flant\u0131y\u0131 a\u00e7,\r\n\\* Ba\u011flant\u0131 varken yap\u0131lacak i\u015flemler *\\\r\nbaglanti.Close(); \\\\ Baglant\u0131y\u0131 kapat.\r\n<\/pre>\n<p>Tabi ba\u011flant\u0131y\u0131 bodoslama a\u00e7\u0131p kapatmay\u0131 denemiyoruz.Ba\u011flant\u0131n\u0131n durumunu kontrol edip ona g\u00f6re hareket ediyoruz.Ba\u011flant\u0131n\u0131n o anl\u0131k durumu State komutu ile \u00f6\u011frenilebilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nif (baglanti.State==ConnectionState.Closed)\r\n            {\r\n                baglanti.Open();\r\n                MessageBox.Show(&quot;Ba\u011flant\u0131 a\u00e7\u0131ld\u0131.&quot;);\r\n            }\r\n<\/pre>\n<p>Yukar\u0131da ba\u011flant\u0131 durumunu kontrol edip ona g\u00f6re ba\u011flant\u0131m\u0131z\u0131 a\u00e7m\u0131\u015f bulunuyoruz.ConnectionState i\u00e7indeki durumlar\u0131 a\u00e7\u0131klayay\u0131m.<br \/>\n<span style=\"color: #99cc00;\">Closed :<\/span> Database e ba\u011flant\u0131 kapal\u0131ysa.<br \/>\n<span style=\"color: #99cc00;\">Broken :<\/span> database e kurulan ba\u011flant\u0131n\u0131n bir \u015fekilde k\u0131r\u0131ld\u0131\u011f\u0131, bozuldu\u011funu haber verir.<br \/>\n<span style=\"color: #99cc00;\">Connecting :<\/span> Ba\u011flant\u0131n\u0131n hala kurulmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131n\u0131 haber verir.<br \/>\n<span style=\"color: #99cc00;\">Executing :<\/span> Ba\u011flant\u0131 kurulmnu\u015f ve \u015fu an o database \u00fczerinde bir i\u015flem yap\u0131l\u0131yor (sorgu i\u015fliyor)<br \/>\n<span style=\"color: #99cc00;\">Fetching :<\/span> Sat\u0131r sat\u0131r i\u015flem yap\u0131l\u0131yor bilgisini haber eder.<br \/>\nNot:A\u00e7\u0131lan her ba\u011flant\u0131 kapat\u0131lmal\u0131d\u0131r.Ve ba\u011flant\u0131 nesnesi yok edilmelidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbaglanti.Dispose(); \\\\ baglanti nesnesini yok eder.Bo\u015funa bellekte yer kaplamaz.\r\n<\/pre>\n<p>\u015eimdi \u00f6nemli bir noktaya de\u011finece\u011fim.E\u011fer biz program\u0131m\u0131z da birden \u00e7ok SqlConnection ba\u011flant\u0131s\u0131 olu\u015fturmu\u015fsak ve ileride bu ba\u011flant\u0131n\u0131n kulland\u0131\u011f\u0131 database de\u011fi\u015ftirmek zorunda kal\u0131rsak b\u00fct\u00fcn ba\u011flant\u0131lar\u0131 teker teker modifiye etmek zorunda kalaca\u011f\u0131z.O halde database ba\u011flant\u0131 c\u00fcmleci\u011fini tek bir yerde tutmal\u0131 ve o tuttu\u011fumuz yerden SqlConnection lar\u0131m\u0131z\u0131n ConnectionString lerine \u00e7ekmeliyiz.Bu i\u015flem \u00e7e\u015fitli yollarla yap\u0131labilir ancak .Net Framework&#8217;\u00fcn bize bu i\u015f i\u00e7in sundu\u011fu &#8220;Application Configuration File&#8221;(App.config) dosyas\u0131n\u0131 kullanaca\u011f\u0131z.Bu dosyay\u0131 eklemek i\u00e7in projeye sa\u011f t\u0131klay\u0131n ve Add new item diyip Aplication Configuration File dosyas\u0131n\u0131 ismini DE\u011e\u0130\u015eT\u0130RMEDEN projeye ekleyiniz.<\/p>\n<p>App.config dosyas\u0131 projenin genelinde kullan\u0131lacak bir tak\u0131m verilerin,ayarlar\u0131n saklanmas\u0131 amac\u0131 ile kullan\u0131lan bir dosyad\u0131r.Bu dosyay\u0131 kullan\u0131n.\u00c7\u00fcnk\u00fc g\u00fcvenlidir.Y\u00f6netimi kolayd\u0131r.<\/p>\n<p>System.Configuration namespace i i\u00e7inde ConfigurationManager class \u0131 ile y\u00f6netilebilir.ConfigurationManager bizi direkt App.config dosyas\u0131na eri\u015ftirir ve oradaki d\u00fc\u011f\u00fcmleri kulland\u0131r\u0131r bize.<\/p>\n<p>\u0130\u00e7inde &lt;configuration&gt; d\u00fc\u011f\u00fcm\u00fc haz\u0131r gelir.Program ayarlar\u0131n\u0131 saklamak i\u00e7in &lt;appSettings&gt; d\u00fc\u011f\u00fcm\u00fcn\u00fc biz a\u00e7ar\u0131z.<\/p>\n<p>\u015eimdi App.config dosyas\u0131yla veritaban\u0131na ba\u011flant\u0131 yapal\u0131m.<br \/>\nApp.config dosyas\u0131n\u0131 projeye ekliyoruz ve i\u00e7ine a\u015fa\u011f\u0131daki kodlar\u0131 yaz\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?--&gt;\r\n\r\n<\/pre>\n<p>key=&#8221;Baglanti&#8221; = App.config dosyas\u0131na eklenen her bir kay\u0131t\u0131n ya index numaras\u0131 vard\u0131r(yaz\u0131l\u0131\u015f s\u0131ras\u0131na g\u00f6re) ya da key anahtar\u0131yla bunlara isim verebiliriz.<br \/>\nvalue=&#8221;server=ServerAd\u0131;database=Veritaban\u0131Ad\u0131;Trusted_connection=true;&#8221; = Bu Ba\u011flanti kay\u0131t\u0131n\u0131n \u00e7al\u0131\u015ft\u0131raca\u011f\u0131 kodlar.<br \/>\n\u015eimdide bu App.config ile veritaban\u0131na ba\u011flanal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System.Configuration;\r\n\r\nSqlConnection baglanti = new SqlConnection(ConfigurationManager.AppSettings&#x5B;&quot;Baglanti&quot;]);\r\nbaglanti.Open();\r\n<\/pre>\n<p>ConfigurationManager.AppSettings[&#8220;Baglanti&#8221;] = Burada AppSettings bir koleksiyon yap\u0131s\u0131ndad\u0131r.App.config dosyas\u0131ndaki d\u00fc\u011f\u00fcm\u00fc i\u00e7inde key de\u011ferlerine index numaras\u0131 ya da ad\u0131yla ula\u015f\u0131p value k\u0131sm\u0131nda tan\u0131ml\u0131 olan de\u011feri string olarak geriye d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>App.config dosyas\u0131nda dikkat etmemiz gereken iki husus var.<br \/>\n-Dosyan\u0131n ad\u0131 App.config olarak kalmal\u0131d\u0131r.De\u011fi\u015ftirmeye \u00e7al\u0131\u015fmay\u0131n\u0131z.<br \/>\n-Ba\u011flant\u0131 c\u00fcmlesinde server\u0131m\u0131z\u0131 belirtirken bazen \\\\ i\u015fareti kullan\u0131r\u0131z.Bunun sebebi \\ \u00f6zel karakter olmas\u0131d\u0131r.At\u0131yorum server\u0131m\u0131z\u0131n ismi Gencay ise &#8220;\\\\Gencay&#8221; olarak belirtmemiz gerekebilir.App.config dosyas\u0131nda ise tek taksim i\u015fareti koymam\u0131z gerekiyor.<\/p>\n<p>SQL Serverda ba\u011flant\u0131 a\u00e7arken \u00e7e\u015fitli sebeplerden dolay\u0131 hatalar olu\u015fabilir.O y\u00fczden ba\u011flant\u0131 a\u00e7\u0131p kapatma i\u015flemini try catch metodlar\u0131 aras\u0131nda yazmal\u0131y\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System.Data.SqlClient;\r\nusing System.Configuration;\r\n\r\n SqlConnection baglanti = new SqlConnection(ConfigurationManager.AppSettings&#x5B;&quot;Baglanti&quot;]);\r\n            try\r\n            {\r\n                if (baglanti.State == ConnectionState.Closed)\r\n                {\r\n                    baglanti.Open();\r\n                    MessageBox.Show(&quot;Ba\u011fland\u0131&quot;);\r\n                }\r\n            }\r\n            catch (SqlException hata)\r\n            {\r\n                MessageBox.Show(hata.Message);\r\n            }\r\n            finally\r\n            {\r\n                if (baglanti.State==ConnectionState.Open)\r\n                {\r\n                    baglanti.Close();\r\n                }\r\n                baglanti.Dispose();\r\n            }\r\n<\/pre>\n<p>Art\u0131k yukar\u0131daki yap\u0131 bize SQL Server a ba\u011flant\u0131y\u0131 kurar, a\u00e7ar, hata varsa yakalar, her durumda da ba\u011flant\u0131y\u0131 kapat\u0131p, nesneyi yok ederek bellek tasarrufunu sa\u011flar. Art\u0131k biz i\u015flemlerimizi (select,insert,update,delete v.s.) a\u00e7\u0131k ba\u011flant\u0131 devam etti\u011fi s\u00fcrece yapabiliriz. \u0130\u015fte bu yap\u0131ya CONNECTED M\u0130MAR\u0130 denir. baglanti.Open()-baglanti.Close() aras\u0131nda database i\u015flemleri yap\u0131l\u0131r.<\/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\u0131m\u0131zda ADO.NET&#8217;e giri\u015f yapaca\u011f\u0131z.Genellikle C# ya da ASP.net ile yazd\u0131\u011f\u0131m\u0131z programlarda database(veritaban\u0131) kullanmaktay\u0131z.Ancak bu programlar\u0131 yazarken veritaban\u0131yla ba\u011flant\u0131 kurmam\u0131z gerekecek, ba\u011flant\u0131 kurdu\u011fumuz veritaban\u0131 \u00fczerinde sorgular \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekebilir.ADO.NET veritaban\u0131yla yap\u0131lacak bu t\u00fcr i\u015fleri ger\u00e7ekle\u015ftiren&#46;&#46;&#46;<!-- 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,130,131,132],"class_list":["post-187","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","category-veritabani","tag-ado-net","tag-app-config","tag-connected","tag-sqlconnection"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/187","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=187"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/187\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}