ADO.NETAdo.Net Microsoft’un veriye erişme teknolojisinin adıdır. Eskiden Microsoft’un veriye erişme teknolojisinin adı bilindiği üzere Ado’dur.Bu teknoloji Activex teknolojisi ile geliştirilmiş bir teknolojidir. Ado,Ado.Net’ e temel oluşturduğu söylenen bir teknolojidir.Ancak hala bu görüş tartışılmaktadır.Aralarında ortak olan ve tartışılmayan tek şey ise veriye erişim felsefesidir. Ado.Net, .Net Framework ile geliştrilen veri işlemlerini kolaylaştıran, N katmanlı mimariler geliştirmek için hazırlanmış ayrıca offline sistemleride destekleyen ve XML’e tam destek veren bir sistemdir.Ado.Net temelde 2 farklı model olarak incelenebilir. Bunlar Connected(Bağlantılı) ve Disconnected(Bağlantısız) modeldir.

mimari
mimari

Connected(Bağlantılı) model: Bu modelde veri tabanı ile direk bağlantı sağlanır.Yapılan değişiklikler, veri tabanına direk yansır.Bu modelde; veri tabanı ile uygulama arasında daima bir bağlantı bulunmaktadır.Genelde online işlemlerde kullanılır. Bu sistemin eksileri son satırı okuyana kadar bağlantının açık kalmasıdır. Bu da ekstra yük demektir.Disconnected(Bağlantısız) model: Bu model veri tabanını kullanmak için her seferinde ona müracaat etmek yerine, veri tabanının bir örneğini Ram üzerine alarak, gelen talepleri belleğin üzerinden gerçekleştirmek için kullanılan bir teknolojidir. Her şey Ram üzerinde yapılır. Böylece veri tabanına fazla yük binmemiş olur. Örneğin güncelleme silme yeni kayıt oluşturma vs. Ama bu modelinde artıları olduğu gibi eksileri vardır. Mesela veri tutarsızlığı, verilerin güncelliğini yitirmesi gibi.Bu modelin en önemli yapı taşları DataSet, DataTable ve DataAdapter’dır.Şunu hatırlatmakta fayda vardır ki: bu model duyulduğunda bağlantı yokmuş gibi bir fikre kapılabilinir ama aslında bunda da kesinlikle bir bağlantı vardır.Ado.Net ÜyeleriSystem.Data: Ado.Net’in en temel kütüphanesidir.Veriyi sembolize eden veri tipleri bu namespace altındadır.Örneğin DataTable,DataSet gibi..System.Data.Common: Bu namespace Data namespace’in altında durmaktadır.Bu namespace’i kullanarak, Managed Provider dediğimiz; veriye erişim kaynaklarında kullanilan sistemlere yönelik siniflar bulunmaktadir. Örneğin; DbDataAdapter,DbConnection,DbCommand,DbDataReader gibi..System.Data.Odbc: Bu namespace (Open Database Connectivity) standartlarını sağlayan ve odbc bulunan sistemlere bağlantı kurmayı sağlayan sınıfları bulundurmaktadır. Örneğin; OdbcCommand, OdbcConnection,OdbcDataAdapter gibi sınıflar vardır.System.Data.OleDb: Bu namespace her türlü veritabanına erişmek için kullanılır.Örneğin elimizdeOracle,Mysql,MsAccess gibi.System.Data.SqlClient: Bu namespace sadece Sql Server’a bağlanmak ve bunuda tam performanslı yapmak için kullanılan tipleri içerir.Aslında SqlServer’a OleDb ile de bağlanılabilir ama burada bunu daha performanslı kılan özel tipler vardır.System.Data.SqlType: Bu namespace altinda bulunan, veri tipleri, Ms Sql Server icerisinde desteklenen doğal veri türlerini icerir.System.Data.OracleClient: Bu namespace normalde .Net FrameWork’te yoktur.Ama Oracle’cıların oturupda yazdığı bir namespace’tir.Oracle’a OleDb ile de bağlanılabilir.Ama bunu performanslı yapabilmek için böyle bir kütüphane oluşturulmuştur.Ado.Net’ten Bazı TiplerSqlConnection: Bu sınıf ile bağlantı kurmak istediğimiz yeri(bu local olur veya farklı bir yerdeki server olabilir),bağlanma şeklimizi,bağlantı kuracağımız database’mizi ve birçok özelliğini burada belirtiriz.Bu sınıfın en önemli faktörü bağlantının açık unutulmamasıdır.Bir diğer önemli özellik ise bağlantı cümlesidir.Çünkü yetkilere ve rollere göre bağlantının açılabilmesidir.Bu nesne System.Data.SqlClient namespace’i adı altında bulunmaktadır.SqlConnection sınıfının bazı özellikleri şöyledir:SqlConnection con = new SqlConnection();//Sınıfımızı burada örnekliyoruz.SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();//Burada SqlConnectionStringBuilder kullanma sebebim bazen çok fazla özellikler yazmak zorunda kalırız SqlConnection’ın içine.Bu yüzden işimizi kolaylaştırmak için ve özelliklerini daha iyi göstermek için kullandım.builder.DataSource = “.”;//Burası Sql Server İnstance adının yazıldığı yerdir. Ben burada default olarak bağlandım locale.builder.InitialCatalog = “AdventureWorks”;//Bağlanmak istediğimiz database adını buraya yazıyoruz.builder.IntegratedSecurity = true;//true ise Windows Authentication ile bağlanılmak istendiğini, false ise SqlServer Authentication ile bağlanmak istenildiğini gösterir.builder.UserID = “sarikanaryam”;//false ise user id yi buraya yazılır.builder.Password = “fenerbahcem”;//false ise password da buraya yazılır.builder.AsynchronousProcessing = true;//Bazen Asenkron işlemlerde bulunmak isteriz o zaman asenkron işlemleri yapabilmek için true değerini vermemiz gerekir.builder.Pooling = true;//Aynı connectionstring isteklerinde bağlantının tekrardan oluşturulmasu yerine bu özelliği true olarak yazdığımızda connectionstring havuza atılır. Sonraki baglantı işlemlerinde bu havuzda olan açık ve kullanılabilir bağlantı alınıp kullanılır.Default olarak 100 adet bağlantı tutulur.builder.MaxPoolSize = 523;//Eğer biz ayarlarla oynamak istersek Pooling özelliğini false yapıp kendi değerlerimizi atarız.builder.MinPoolSize = 223;con.ConnectionString = builder.ConnectionString;Open():Bu metod bağlantının açılmasını sağlar.Close():Bu metod bağlantının kapatılmasını sağlar.State :Bu özellik ise bağlantının durumunu verir.Örneğin açık,kapalı,çalışıyor veya kırılmış gibi..SqlCommand: Sql’ de yapılacak işlemlere ayak olan sınıftır.Bu nesne System.Data.SqlClient namespace’i adı altında bulunmaktadır.Başlıca metot ve özellikleri şöyledir.SqlCommand cmd = new SqlCommand();//Önce sınıfımızı örnekliyoruz.cmd.CommandText = “Select top 5 name from production.product”;//burada çalıştırmak istediğimiz sql cümlesini yazıyoruz.cmd.CommandType = CommandType.Text;//burada yazdığımız cümlenin ne olduğunu söylüyoruz.cmd.Connection = con;//hangi bağlantı üzerinden bu işlemleri yapacağımızı söylüyoruz.cmd.ExecuteNonQuery():Yazılan Sql cümlesi yada stored procedurlerde yapılan işlemler sonrası etkilenen kayıt sayısını geriye döndürür.Geriye int tipi döner.cmd.ExecuteScalar():Bu metod excecutenonwuery gibidir fakat geriye bir int tip değilde object cell dönderir yani tek bir hücre döner.cmd.ExecuteXmlReader():Sql server üzerinde oluşturulmuş xml veriyi bozmadan veriyi xml olarak almayı sağlar.cmd.ExecuteReader():Bu metod ise veri paketi yada paketlerini okur.Geriye ise SqlDataReader döner.SqlDataReader: Bu sınıf Connected modellerde kullanılır.Bu sınıftan örneklenen değişken yukarda anlatıldığı üzere ExecuteReader() metodundan döner.Ayrıca bu sınıf sadece read-only ve forward-only mantığı ile çalışmaktadır. Bu nesne System.Data.SqlClient namespace’i adı altında bulunmaktadır.Bazı önemli metod ve özellikleri şöyledir.SqlDataReader dr = cmd.ExecuteReader();//önce bilgiyi üzerimize aldık.dr.Read()://bu metod result setin bir sonraki satırına geçmeyi sağlar.Satır varsa true yoksa false döner.dr.GetSQLTİPADI()://burada SQLTİPADI() yazılan yere sqlserverdaki o fieldın tip adı getirilir.Ayrıca bu metod; örneklediğimiz field Read olduğunda o satırdaki sütunların değerlerini alabilmeye yarar.dr.Close():Veri okuma bittiğinde bu metod ile kapatılır.Bir örnek kullanım verecek olursak:

baglantili
baglantili

SqlDataAdapter:Bu sınıf Disconnected modelin en güçlü parçasıdır.Ne i