Xml dosyasını veritabanı olarak kullanma

Xml ile az çok uğraşanlar bilir tanımını ne işe yaradığını. Onun için hakkında pek fazla konuşmayacağım. Yalnız tanımına ayrıkırı bir örnek paylaşacağım için bir şeyler söylemeden geçemeyeceğim.

Xml nedir diye sorunca hemen herkes wikipedia ‘ya sarılır ve merakını giderir. Kullanımı hakkında yazılan yazıda; “Rastgele veri erişimine uygun olmadığından veri tabanı amaçlı kullanılmamaktadır.” ibaresi içermektedir. Bunun nedeni herhangi bir kısıtlama olmadan normal bir şekilde okunabilir olması.  Örneğin .mdb uzantılı database dosyasına sağ tıkladığımızda verileri okuyamıyoruz. Ancak xml basit bir not defterinde yardımıyla bile okunabilmekte.  Biz bu ibareyi es geçip xml dosyasını veritabanı olarak nasıl kullanırız basit bir örnekle öğrenelim.(Tanımda veritabanı olarak kullanamazsınız demiyor nede olsa)

xml-dosya-kayit

Xml dosyasını veritabanı veya sadece bir tablo olarak verimli bir şekilde kullanabilmek için database deki gibi tabloda her kayıtta artan id numarasına ihtiyacımız olacaktır. Bu ihtiyacı nasıl giderebiliriz, xml dosyasını nası veritabanı gibi kullanabiliriz, buyrun örnekte görelim..

veritabani-gibi-kullanma

Resimdeki gibi boş bir forma 2 button bir label ve bir adet textbox ekleyerek kod kısmına geçebiliriz. Öncelikle boş xml dosyası oluşturmak için btnXmlOlusutur isimli butonunun clik olayına gelerek alttaki kodları uygulayalım.

[cc lang=’csharp’ ] private void btnXmlOlusutur_Click(object sender, EventArgs e)
{
if (!File.Exists(“xmldosyam.xml”)) // Daha önceden dosyanın var olduğunu kontrol ettik. Dosya yoksa .xml uzantılı xmldosyam adında dosya oluşturma işlemine başladık.
{
XmlTextWriter xmlolustur = new XmlTextWriter(“xmldosyam.xml”, null); // XmlTextWriter sınıfından oluşturacağımız dosya özellikleri için nesne oluşturduk.

xmlolustur.WriteStartDocument();

xmlolustur.WriteComment(“Oluşturulan xml hakkında bilgi”); //// Dosya hakkında bilgi ekledik.

xmlolustur.WriteStartElement(“Baslangic”); // Başlangıç elementi gibi özellikleri ekledik.

xmlolustur.WriteEndDocument();
xmlolustur.Close();

label1.Text = “Dosya programın bulunduğu dizine oluşturuldu.”;
}
else
{
MessageBox.Show(“Oluşturulmadı”); // Daha önceden dosya varsa veya herhangi bir hatada buradaki mesajı verir.
}

}[/cc]

Gerekli kod açıklamaları kodlar içinde mevcut. (Anketten dolayı haddinden fazla detaya girdiğim için özür dilerim)

Dosya oluşturma işlemini yaptıktan sonra oluşturulan xml dosyamız içine standart bir veri tabanındaki tablo yapısı gibi otomatik artan id kolonlu kayıt gerçekleştirelim. Bunun için txtKayitAdi isimli metin kutumuza girilen karakteri xml dosyasına kayıt etme işlemine geçelim. Bunun için btnEkle isimli butonun clik olayına gelip alttaki kodları girelim.

[cc lang=’csharp’ line_numbers=’true’]
private void btnEkle_Click(object sender, EventArgs e)
{
bool varmi = false;
int enBuyukId;

XmlDocument doc = new XmlDocument(); // Xml dosyamızı okumak için XmlDocument sınıfından yararlanıyoruz.
doc.Load(“xmldosyam.xml”);
XmlElement root = doc.DocumentElement;
XmlNodeList kayitlar = root.SelectNodes(“/Baslangic/Kullanicilar”); // Xml içindeki istediğimiz kayıtlara ulaşabilmek için yolu tanımlıyoruz. Bunu veritabanı içindeki
// tablo olarak düşünebilirsiniz. Bu yol ile Kullanicilar tablosuna yani listesine ulaşıp kayıtları XmlNodeList sınıfından oluşturduğumuz kayitlar isimli

if (kayitlar.Count > 0) // Her yeni kayıta otomatik farklı id numarası verebilmek için bir önceki kayıtın id numarasına göre işlem yapmamız gerekecek. Burada ilk kayıt varmı kontrol ediyoruz. Varsa, kayıtlar içinde en büyük idyi yani numarayı bulup üzerine 1 ekletip yeni kayıt için hazırlıyoruz. Yoksa, daha önce kayıt oluşturulmamışsa ilk kayıt numarasını 0 atayıp kayıt için gönderiyoruz.
{
varmi = true;
}

if (varmi == true)
{
int[] kayittakiSayilar = new int[kayitlar.Count]; // Kayıt sayısı kadar dizi tanımaldık.

int i = 0; // Diziyi arttırmak için sayı tanımladık.
foreach (XmlNode secilen in kayitlar)
{
kayittakiSayilar[i] = Convert.ToInt32(secilen[“id”].InnerText); // Kayıtlardaki tüm id yani numaraları kayittakiSayilar dizisi içine ekledik.
i = i + 1;
}

Array.Sort(kayittakiSayilar); // kayittakiSayilar dizisi içinde bulunan sayılardan en büyüğünü bulabilmek için Array sınıfını kullandık. Bulunan en büyük sayıya 1 ekledik.
enBuyukId = kayittakiSayilar[kayittakiSayilar.Length – 1];
enBuyukId = enBuyukId + 1;

}
else
{
enBuyukId = 0;
}

if (File.Exists(“xmldosyam.xml”)) // Xml dosyamıza kayıt eklemede hata almamak için dosyanın var olup olmadığını kontrol ediyoruz.
{

XmlElement UserElement = doc.CreateElement(“Kullanicilar”); // Veritabanından tablo ismi gibi düşünbebilirsiniz.

XmlElement id = doc.CreateElement(“id”); //Oluşturulan xml içindeki Kullanicilar elementine id isimli element (DB deki gibi düşünürsek Kullanicilar tablosuna id kolonunu ekliyoruz.)
id.InnerText = enBuyukId.ToString();
UserElement.AppendChild(id);

XmlElement adi = doc.CreateElement(“adi”); // İkinci elementi ekliyoruz.(Yani ikinci kolonu)
adi.InnerText = txtKayitAdi.Text;
UserElement.AppendChild(adi);

doc.DocumentElement.AppendChild(UserElement);

XmlTextWriter xmleekle = new XmlTextWriter(“xmldosyam.xml”, null);
xmleekle.Formatting = Formatting.Indented;
doc.WriteContentTo(xmleekle);
xmleekle.Close();

label1.Text = “Kayıt eklendi.”; // Kayıt işlemi başarılı bir şekilde bittikten sonra mesaj için label kullanabilirsiniz.
}
}
}
[/cc]

Gerekli kod açıklamalarını kodlar içinde bulabilirsiniz. Oluşturulan, xmldosyam.xml dosyasını programın exe sinin olduğu yerde bula bilirsiniz. Veya oluştururken, kayıt ekerken istediğiniz dosyaya koyup işlem yapabilirsiniz.   Bu gibi uygulamayı; telefon rehberi, gizlilik gerektirmeyen kayıt giriş çıkış gibi programlar için örnek alabilirsiniz.

Vb.net kodlarına ve yorum satırı olmayan kodlara ulaşmak için alttaki numaraları kullanarak diğer sayfaya geçebilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir