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: bulunmaktadir. butonu dataset disaridan farkli nesnesi nesnesinin oldugu olusturdugumuz primary sistemler string system.data tablonun tablosunun 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 : Orta
Kategori : ADO.NET/SQL
Yayınlanma Tarihi : 15.7.2004
Okunma Sayısı : 32880
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 30.6.2022
Turhal Temizer
Mac OS/X Removing CUDA 30.6.2022
Burak Selim Şenyurt
Rust Pratikleri - Value Moved Here 30.6.2022
Burak Selim Şenyurt
Rust Pratikleri - State Tasarım Kalıbı 30.6.2022
  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 Dataset Nesnesi ve XML
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
HAZ
17
2005
Uyarı için teşekürler. Hata düzeltildi.
HAZ
17
2005
ado.nette dataset nesnesi ve xml başlıklı yazınız ekinde bulunan örnek kodların içeriği başka bir makaleye ait
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