|
ADO.Net'te Abstract İnterfacelerin Kullanımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
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
|
|
|
-
-
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
|
|