Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Feryat Olcay
Feryat Olcay
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
15 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: app.config baglanti connectype dataadapter dosyasini farkli idbcommand if(connectype managed nesnesi sayisi tipini veritabani veritabanini veriyi ADO.NET/SQL Feryat Olcay
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : ADO.NET/SQL
Yayınlanma Tarihi : 4.8.2004
Okunma Sayısı : 21860
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 22.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 22.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 22.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 22.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ADO.Net'te Abstract İnterfacelerin Kullanımı
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
ADO.Net kütüphanesindeki nesneler bağlantılı(connected) ve bağlantısız(disconnected) olarak tasarlanmışlardır.Bağlantılı katmanlar :Connection nesnesi,Command Nesnesi , DataAdapter vb. gibi veritabanı ile birebir ilişkileri olan nesnelerdir.Bağlantılı katmandaki nesneler veritabanına bağlanma, sorgu veya  komut gerçekleştirme yada var olan veriyi taşıma gibi olaylarda kullanılırlar. Bağlantısız katmanda da Dataset, DataTable,DataRow vb. daha çok veri veritabanından sonra yapılabilecek işlemleri gerçekleştiren nesnelerdir.

Bugünkü konumuz bağlantılı katmandaki nesneleri incelemek olacaktır.ADO.Net ADO dan farklı olarak  hangi veritabanını veya managed provideri kullancağını bilecek şekilde tasarlanmıştır.ADO.Net’te  SQL Server ve Oracle’ için ayrı ayrı kütüphaneler mevcuttur.Bu kütüphaneler sayesinde ara katman olan OLEDB ’yi kullanmadan veritabanına direk bağlanmamızı sağlar.Bu durum performans açısından çok önemlidir.ADO.Net kütüphaneleri System.Data isim uzay alanı(namespace) içerisindedir.Burada OleDb ,SqlClient ,OracleClient ,Odbc kütüphaneleri bulunmaktadır.

Projelerimizi gerçekleştirirken bazı durumlarda hangi veritabanını kullanacağımızı bilemeyiz.Yada projemiz mödüller halindedir ve mödül sayısı arttıkça tutulacak veri miktarı tablolar arasındaki ilişkiler ve veritabının iş yükü artacaktır.Bu durumda projemizin farklı veritabanlarına uyum sağlayabilmesi gerekir.Ayrıca projenin fiyatlandırılmasında ve satışında bize avantaj sağlar.

ADO.Net farklı managed providerlere göre tasarlanmış olsada yapacağımız kontroller sayesinde veritabanı bağımsız kod gerçekleştirebiliriz.Bunun için System.Data’da bulunan ve temel veritabanı işlemleri gerçekleştirmek için yapılmış olan IDbConnection , IDbCommand , IDbDataAdapter , IDataReader vb interfacelerdir.Bu interfaceler soyut(abstract) nesnelerdir ve meneged providerlardaki ilgili sınıflarla kalıtım yolu ile işlevselleşirler.

Bunu bir örnekle görelim.Örneğimizin teması bina ve bina ile ilgi bilgileri tutan bir yapı olsun.Biliyorsunuz bir mahalle için bina sayısı çok azdır.Bir ilçe için bu sayı artar normal bir il için bilgi sayısı ciddileşir ve sözkonusu büyükşehirlerdeki bina bilgisi olduğu zaman olayın buyutu değişir.Tabi elde edilecek verininde.Ama bizim amacımız bu yazmış olduğumzu programı hem bir mahalledeki muhtara satabilmek hemde bir büyükşehir belediyesine.Tek yapmamız gereken veritabanını tipini değiştirmek olmalı.

Bina isimli tablomuz şöyle olsun:

 Şekil 1- Tablonun ekran görüntüsü.

Öncelikle projemizde System.Data’yı ekleyelim.Eğer System.Data’da aşağıdaki kütüphaneler yok ise referasn olarak ekleyiniz.Oracleclient kütüphanesini eklemek istersek Projenin References >>Add Reference>>.NET>> System.Data.OracleClient.dll eklememiz yeterli olacaktır.

Şekil 2- System.Data isim uzay alanı altında kullanılacak kütüphaneler.

Hangi veritabanı tipini kullanacağımızı ve bağlantı yolunu belirlemek için ben App.config dosyasını kullandım.Tabi siz bunu daha farklı şekilde yapabilirsiniz.App.config dosyasını eklemek için Add>>Add New Item >> En alta Application Configuration File bulunmaktadır.

Şekil 3-App.config dosyası 

Yapmamız gereken System.Configuration.AppSettingsReader sınıf yardımı ile bir nesne oluşturup App.config dosyasındaki yapımızı okuyup gerekli kodu yazmak olacaktır.IIDbConnection nesnesi ile veritabanına bağlanacağız , IDbCommand nesnesi  ile veriyi kaydedeceğiz , IDbDataAdapter  nesnesi ile de veriyi göstereceğiz.

//Private değişkenler

private myConnectionType ConnecType;

private string AppConnectionString;

private string AppConnectionType;

public enum myConnectionType {

SqlServer, OleDb, Oracle, Odbc // Database bağlanırken kullanacağımız managed provider çeşitlerimiz

}

public myConnectionType getConnectionType()

{ //App.config dosyasında buluna tipe göre myConnectionType ’ninn belirlenmesi

      if(AppConnectionType == "ORACLE")

            return ConnecType = myConnectionType.Oracle;

       else if(AppConnectionType == "SQL Server")

            return ConnecType = myConnectionType.SqlServer;

      else if(AppConnectionType=="OLEDB")

            return ConnecType = myConnectionType.OleDb;

      else if(AppConnectionType=="ODBC")

            return ConnecType = myConnectionType.Odbc;

      else

            throw new Exception("Proje için tanımsız bağlantı tipi.");

}

public IDbConnection getConnection()

{ // myConnectionType tipine göre Connection nesnesini oluşturulması

      if(ConnecType == myConnectionType.Oracle )

            return new OracleConnection(AppConnectionString);

      else if(ConnecType == myConnectionType.SqlServer)

            return new SqlConnection(AppConnectionString);

      else if(ConnecType == myConnectionType.OleDb)

            return new OleDbConnection(AppConnectionString);

      else

            return new OdbcConnection(AppConnectionString);

}

public IDbCommand getCommand()

{ // myConnectionType tipine göre Command nesnesini oluşturulması

      if(ConnecType == myConnectionType.Oracle )

            return new OracleCommand();

      else if(ConnecType == myConnectionType.SqlServer)

            return new SqlCommand();

      else if(ConnecType == myConnectionType.OleDb)

            return new OleDbCommand();

      else return new OdbcCommand();

}

public IDbDataAdapter getDataAdapter()

{ // myConnectionType tipine göre DataAdapter nesnesini oluşturulması

      if(ConnecType == myConnectionType.Oracle )

            return new OracleDataAdapter();

      else if(ConnecType == myConnectionType.SqlServer)

            return new SqlDataAdapter();

      else if(ConnecType == myConnectionType.OleDb)

            return new OleDbDataAdapter();

      else

            return new OdbcDataAdapter();

}

private void Form1_Load(object sender, System.EventArgs e)

{ // App.congig dosyasını okumak için AppSettingsReader nesnesi oluşturuyoruz.F ormumuz oluştuğu zaman App.config dosyasını okuyarak bağlantı tipini alıyor.

      System.Configuration.AppSettingsReader AppSettings = new System.Configuration.AppSettingsReader();

      AppConnectionType = ((string)(AppSettings.GetValue("ConnectionType", typeof(string))));

      AppConnectionString= ((string)(AppSettings.GetValue("ConnectionString", typeof(string)))); getConnectionType();

      //myConnectionType diye adlandırdığımız nesnemizin tipini belirliyoruz.

}

 private void buttonKaydet_Click(object sender, System.EventArgs e) {

       IDbConnection _Connection; //Connection nesnelerimizi soyut(abstract) interfacelerden oluşturuyoruz.

      IDbCommand _Command; //Command nesenesi de bir soyut(abstract) interfacelerden oluşturuyoruz .

      _Connection = getConnection();

      if(_Connection.State == ConnectionState.Closed)

              _Connection.Open();

      string SQL= "INSERT INTO Bina VALUES ("

      + Convert.ToInt32(textBoxId.Text)+ "," +"’"

      + Convert.ToString(textBoxAdi.Text) + " ’,"

      + Convert.ToInt32(textBoxKat.Text) + ","

      +"’"+ Convert.ToString(textBoxTipi.Text) + " ’,"

      +"’"+ Convert.ToString(comboBoxAnasor.Text) + " ’,"

      +"’"+ Convert.ToString(comboBoxKalorifer.Text) + " ’" +")";

       _Command = getCommand();

      _Command.CommandText=SQL;

      _Command.Connection = _Connection;

      _Command.ExecuteNonQuery(); 

}

private void buttonGoster_Click(object sender, System.EventArgs e)

      IDbConnection _Connection;

      IDbDataAdapter _DataAdapter; // DataAdapter nesnemiz soyut(abstract) interface lerden oluşturuyoruz.

      IDbCommand _Command;

      _Connection = getConnection();

      if(_Connection.State == ConnectionState.Closed)

             _Connection.Open();

      DataSet myDs = new DataSet();

      string SQL= "SELECT * FROM Bina" ;

      _DataAdapter = getDataAdapter();

      _Command = getCommand();

      _Command.CommandText = SQL;

      _DataAdapter.SelectCommand = _Command;

      _DataAdapter.SelectCommand.Connection = _Connection;

      _DataAdapter.Fill(myDs);

      dataGrid1.DataSource = myDs; 

 }

Kod 1-Örnek kodlar 

Bu tarz kontroller yardımları ile diğer nesnelerinde soyut interfacelerine işlev kazandırabiliriz. 



Yazıda geçen kontrolün kaynak kodunu ve demo uygulamasını buradan indirebilirsiniz.

Makale:
ADO.Net'te Abstract İnterfacelerin Kullanımı ADO.NET ve SQL Feryat Olcay
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
29
2010
Yazı için teşekkürler, Örnek kodların link çalışmıyor.
AĞU
4
2004
Bu yazı ile System.Data isim alanının OOP kurallarına uyularak çok güzel tasarlandığını görüyoruz. Bizlerde yazılım geliştirici olarak eğer projelerimizde OOP kurallarını tam anlamıyla kullanabilirsek projelerimiz hem daha esnek hem de daha profesyonel olacaktır.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor