|
ADO.Net'te Dataset Nesnesi ve XML |
|
Gönderiliyor lütfen bekleyin... |
|
|
Günümüz
teknolojileri bize farklı sistemler sunmaktadır. Fakat bu farklı sistemler
verileri farklı farklı kaydettiği için kendi aralarında veri transferi
yaparken zorluk çekerler. Özellikle internet ortamında veri transferi
gerçekleşirken veriler farklı formatta oldukları için güvenlik duvarlarına
(firewall) takılırlar. Bu ve buna benzer sorunların ortadan kalkması
ve aralarındaki iletişimi sağlayabilmek için sistemler ortak bir
dil ihtiyacı duydular.Ve bu amaçla XML (eXtensible Markup Language)
yani Genişletilebilir İşaretleme Dili standarları oluşturdular. XML’in
yapısı text file formatlı olduğu için sistemlerin güvenlik duvarlarına
takılmaz.Katmanlı yapısından dolayı veri kaybı olmaz.Verinin güvenli ve
hızlı transfer edilebilmesinden dolayı son derece kullanışlıdır.
Visual
Studio’da bulunmakta olan ADO.Net de, öncesi olan ADO’ya oranla eksikleri
tamamlamış ve XML konusunda oldukça gelişmiştir. Özellikle DataSet
nesnesi XML mimarisine uyumlu tasarlanmıştır.
Bugünkü konumuz bir Dataset
nesnesinin veritabanı bağlantısı olmadan nesnelerini (tabloları, kolonları ve
satırları) oluşturup veri eklemek. Oluşturduğumuz veri kümesini XML’e
dönüştürmek ve dışarıdan okuduğumuz bir XML dosyasını dataset nesnesine atmak
olacaktır. Öncelikle dataset nesnesini oluştururken kullanacağımız birkaç
nesneden bahsedelim.
DataTable: DataTable
nesnesi System.Data kütüphanesinde bulunmaktadır. Dataset’ten bağımsız
kullanıldığı gibi dataset nesnesi içerisinde de kullanabiliriz. DataTable
nesnesinin esas görevi bir veri kümesini bellekte tutmaktır.
DataColumn:
DataColumn nesnesi System.Data kütüphanesi
altında bulunmaktadır. Bir tablonun bir kolonunu temsil etmektedir.
DataRow: DataRow
nesnesi System.Data kütüphanesi altında bulunmaktadır. Bir tablonun bir
satırını temsil etmektedir. Tabloya kayıt ekleme, silme veya güncelleme
işlemlerinde kullanılabilir. Bir satır (row) oluştururken dikkat edilmesi
gereken husus, new anahtar sözcüğünü kullanmadan istediğimiz tablodan türetmek
olacaktır. Böylece oluşturduğumuz satır o tablonun bütün özelliklerini almış
olur.
DataRow myRow = IlceTable.NewRow();
|
Kod 1 - DataRow
nesnesi
Ekran görüntümüz aşağıdaki gibi
olsun. DataGrid Doldur butonu bize Dataset’imizi
oluşturacak. XML Oluştur butonumuz oluşturduğumuz Dataset’i XML’e
alacak ve en son olarak da XML Oku butonu dışarıdan okuduğumuz bir XML dosyasının verilerini Dataset nesnesine atacak.
Şekil 1- Ekran
görüntüsü
İlk
kodumuz Dataset nesnesini oluşturuyor. Dataset nesnemize veritabanında tablo
oluşturur gibi önce tablomuzu daha sonra tablomuzun alanlarını ve bu alanların
veri tiplerini veriyoruz. Tasarım işlemi bittikten sonra tablolarımızın primary
ve foreign key’lerini oluşturacağız.
private DataSet VeriKumesiOlustur() {
DataSet GenelDataset = new DataSet();
DataTable IlTable = new DataTable();
DataTable IlceTable = new DataTable();
DataTable MahalleTable = new DataTable();
//Tablolarımızı ve datasetimizi
isimlendirelim
GenelDataset.DataSetName = "GENEL";
IlTable.TableName = "IL";
IlceTable.TableName = "ILCE";
MahalleTable.TableName = "MAHALLE";
//İl tablosunun tasarımının
yapılması. Alan isimleri ve veri tipinin verilmesi
IlTable.Columns.Add("IlId",Type.GetType("System.Int32"));
IlTable.Columns.Add("IlAdi",Type.GetType("System.String"));
//İlçe tablosunun tasarımı
IlceTable.Columns.Add("IlceId",Type.GetType("System.Int32"));
IlceTable.Columns.Add("IlId",Type.GetType("System.Int32"));
IlceTable.Columns.Add("IlceAdi",Type.GetType("System.String"));
//Mahalle tablosunun
tasarımı
MahalleTable.Columns.Add("MahalleId",Type.GetType("System.Int32"));
MahalleTable.Columns.Add("IlceId",Type.GetType("System.Int32"));
MahalleTable.Columns.Add("IlId",Type.GetType("System.Int32"));
MahalleTable.Columns.Add("MahalleAdi",Type.GetType("System.String"));
//İl tablosunun primary key
alanının oluşturulması; İl tablomuzda tek bir alan primary olduğu için sadece
tek bir kolon oluşturacağız
DataColumn pIlKey = new DataColumn();
pIlKey = IlTable.Columns["IlId"];
// Primary olarak belirleyeceğimiz alan
IlKey.AutoIncrement =
true; //
Alanın değerinin otomatik artıp artmayacağı. Biz otomatik artan olarak
tasarlayacağız.
pIlKey.AutoIncrementSeed = 1; //Primary
alanımızın ilk başlangıç değeri
pIlKey.AutoIncrementStep = 1 ; //Primary
alanımızın değerinin kaçar kaçar artacağı
pIlKey.AllowDBNull = false
; // Primary alanımız boş
geçilemez
// İlçe tablosunun Primary
alanları IlceId ve IlId olacağı için yapı biraz daha farklı olur; Tek bir
kolon olmadığı için bir dizin oluşturacağız
DataColumn[] pIlceKey = new DataColumn[2];
pIlceKey[0] = IlceTable.Columns["IlceId"];
pIlceKey[1] = IlceTable.Columns["IlId"];
IlceTable.PrimaryKey = pIlceKey;
//Mahalle tablosunda primary
alan bir tane daha artıyor. İlçe tablosundan farklı olarak dizinimizin sayısını
1 tane daha artıracağız;
DataColumn[] pMahalleKey = new DataColumn[3];
pMahalleKey[0] =
MahalleTable.Columns["MahalleId"];
pMahalleKey[1] = MahalleTable.Columns["IlceId"];
pMahalleKey[2] = MahalleTable.Columns["IlId"];
MahalleTable.PrimaryKey = pMahalleKey;
// Tablolara kayıt ekleme
DataRow myRow ; myRow = IlTable.NewRow();
//"IlId" bu alana değer vemeyeceğiz .
Çünkü yukarıda otomatik artan alan olarak belirttik.
myRow["IlAdi"] = "Istanbul";
IlTable.Rows.Add(myRow);
myRow = IlTable.NewRow();
myRow["IlAdi"] = "Ankara";
IlTable.Rows.Add(myRow);
// İl tablomuza iki kayıt
ekledik. Aynı işlemleri diğer tablolar için de yapalım, İlçe tablosuna kayıt
ekleme
myRow = IlceTable.NewRow();
myRow["IlceId"] = 1;
myRow["IlId"] = 1;
myRow["IlceAdi"] = "Beşiktaş";
IlceTable.Rows.Add(myRow);
myRow = IlceTable.NewRow();
myRow["IlceId"] = 1;
myRow["IlId"] = 2;
myRow["IlceAdi"] = "Kızılay";
IlceTable.Rows.Add(myRow);
myRow = IlceTable.NewRow();
myRow["IlceId"] = 2;
myRow["IlId"] = 2;
myRow["IlceAdi"] = "Çankaya";
IlceTable.Rows.Add(myRow);
//Mahalle Tablosuna kayıt ekleme
myRow = MahalleTable.NewRow();
myRow["MahalleId"] = 1;
myRow["IlceId"] = 1;
myRow["IlId"] = 1;
myRow["MahalleAdi"] = "Barbaros Mahallesi";
MahalleTable.Rows.Add(myRow);
myRow = MahalleTable.NewRow();
myRow["MahalleId"] = 2;
myRow["IlceId"] = 1;
myRow["IlId"] = 1;
myRow["MahalleAdi"] = "yeni Mahalle";
MahalleTable.Rows.Add(myRow);
// Tablolarımızın sütunlarını,
satırlarını oluşturduk ve veri ekledik. Elimizdeki tabloları Dataset nesnemize
ekleyelim
GenelDataset.Tables.Add(IlTable);
GenelDataset.Tables.Add(IlceTable);
GenelDataset.Tables.Add(MahalleTable);
//Tablolar arası foreign key
ilişkisini oluşturalım. Il ve Ilçe tablolarının ilişkilendirilmesi. Bu tablolar
arası ilişki tek bir alan üzerinden olmaktadır. GenelDataset.Relations.Add(GenelDataset.Tables[0].Columns["IlId"],GenelDataset.Tables[1].Columns["IlId"]);
//İkinci ve Üçüncü tabloların
ilişkilendirilmesi; İlçe ve mahalle tablolarındaki ilişki iki alan üzerine
olduğu için öncelikle ilişki kuracağımız kolonlardan dizinler oluşturup kolon
dizinlerini birbiriyle eşleştireceğiz.
DataColumn[] fIlceKey = new DataColumn[2];
fIlceKey[0] = IlceTable.Columns["IlceId"];
fIlceKey[1] = IlceTable.Columns["IlId"];
DataColumn[] fMahalleKey = new DataColumn[2];
fMahalleKey[0] = MahalleTable.Columns["IlceId"];
fMahalleKey[1] = MahalleTable.Columns["IlId"];
GenelDataset.Relations.Add(fIlceKey,fMahalleKey);
return GenelDataset; }
|
Kod 1 - Dataset’in DataGrid’e doldurulması
Bu işlemler sonucunda
bir dataset elde ettik. DatagridDoldur butonu çalıştığında elimizdeki Dataset’i
DataGrid’e aktaracaktır.
Şekil 2 - Dataset’in DataGrid’e doldurulması
İkinci
işlemimiz dataset nesnesinin XML ile ilgili metotlarını kullanarak veri okuma
ve veri yazmak. XML ile ilgili birkaç metodu inceleyelim.
GetXml(): Dataset
nesnesi içerisindeki veriyi XML formatında string olarak geri döndürür.
ReadXml(): Datasetin
dışarıdan veri okumasını sağlar. Çok farklı kullanım şekilleri vardır.
İhtiyacınıza göre dosya ismi, dosya yolu, XMLReader, XmlTextReader
vb. nesneler yardımı ile kullanabilirsiniz.
WriteXml(): Dataset
nesnesi içerisindeki veriyi dışarıya yazdırmak. Bu metot da ReadXML metotunda
olduğu gibi farklı şekillerde kullanılabilir.
Elde
ettiğimiz Dataset’i XML’e alalım. GetXML() metodu string formatında alır. Ama
biz standart XML formatında almak için bazı işlemler yapmak zorundayız. Bunlar
Nested yani yuva oluşturma ve kayıtların konumlandırılması olacaktır.
private string XMLOlustur() {
VeriKumesiOlustur() ;
//Gelen verinin XML’inde node’ların
iç içe yuvalanması için oluşturduğumuz her ilişkinin Nested özelliğini true
yapıyoruz
GenelDataset.Relations[0].Nested = true;
GenelDataset.Relations[1].Nested = true;
//Tabloların içindeki alanların
yerlerinin oluşturulması
for (int j=0;j<GenelDataset.Tables.Count;j++ )
for (int i=0;i
<GenelDataset.Tables[j].Columns.Count;i++)
GenelDataset.Tables[j].Columns[i].ColumnMapping = MappingType.Attribute;}
}
|
Kod 2 - Dataset’in XML’inin string olarak
alınması ve XML formatına dönüştürülmesi.
Şekil 3 - Datasetinin XML ’inin
alınması
Dataset nesnesinin XML
lini aldık. Son olarak da dışarıdan Dataset’e XML okutma işlemi. Bunu da
ReadXML() metodu ile gerçekleştireceğiz.
private void XMLOku()
{
DataSet GenelDataset = new DataSet();
XmlTextReader myRd ;
myRd = new XmlTextReader("myXML.xml");
GenelDataset.ReadXml(myRd);
dataGrid1.DataSource = GenelDataset;
richTextBox1.Text = GenelDataset.GetXml();
}
|
Kod 3 - Dataset’e dışarıdan XML
okutma;
Şekil 4 - Dataset’e dışarıdan XML
okutma;
Görüldüğü gibi
ADO.Net XML konusunda son derece gelişmiştir.
Yazıda geçen kontrolün kaynak
kodunu ve demo uygulamasını buradan indirebilirsiniz.
Makale:
ADO.Net'te Dataset Nesnesi ve XML 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
|
|