Ana Sayfa > ADO.NET > Sql tablomuzdan verilerimiz c# ile i xml olarak almak

Sql tablomuzdan verilerimiz c# ile i xml olarak almak

30 Nisan 2010
Sql tarafındaki verilerimizi c# kullanarak xml olarak dosya oluşturma işlemleri
.

Makalemiz boyunca Okul database kısmındaki öğrenci tablomuz içerisindeki verilerimizi
alıp bu verilerimizi xml olarak belirlediğimiz yere saklayacağız .

Okul database imiz için gerekli olan database yapısı aşağıdaki gibidir .

create database Okul

use Okul

create table Ogrenciler

(

id int identity(1,1),

Ad nvarchar(20),

Soyad nvarchar(20),

Adres nvarchar(70),

VeliAdi nvarchar(20),

TelefonNumara nvarchar(20),

EDiplomaNot int,

constraint PK_Ogrenciid primary key(id)

)

Yukarıdaki tanımlamalarda SQL server tarafında örnek database ve tablomuzu oluşturduk
. Simdi c# tarafında işlemlerimizi gerçekleştirelim.

App.config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

<add name="Baglan" connectionString="data source=.; initial
catalog = Okul; integrated security = true"/>

</connectionStrings>

</configuration>

Yukarıdaki tanımlamada app.config dosyası oluşturarak database bağlantı yolumuzu
belirledik .

C# içerisinde bu bağlantımızı kullanmak için Add Referance… kısmından System.Configuration
uygulamamıza implement etmemiz gerekir .

Simdi Ogrenci.cs kısmını oluşturalım . bu class olusturmamızın nedeni sql tarafından
gelen verileri list<> generic bir koleksiyona atarken list<> koleksiyonun
tipini belirlemek içindir.

namespace OgrenciSerilestir

{

[Serializable ]

public class Ogrenci

Ogrenci class ımıza başlamadan önce Ogrenci class ımızı public olarak belirlememiz
ve

[Serializable] seklinde bildirmemiz gerekir.

Ogrenci.cs

string _ad, _soyad, _adres, _veliadi, _telno;

int _diplomanot;

public string Ad

{

get{return this._ad;}

set{this._ad = value;}

}

public string Soyad

{

get { return this._soyad; }

set { this._soyad = value; }

}

public string Adres

{

get { return this._adres; }

set { this._adres = value; }

}

public string VeliAdi

{

get { return this._veliadi; }

set { this._veliadi = value; }

}

public string TelefonNumarasi

{

get { return this._telno; }

set { this._telno = value; }

}

public int DiplomaNot

{

get { return this._diplomanot; }

set { this._diplomanot = value; }

}

Yukarıdaki tanımlamalarda kapsülleme kullanarak değişkenlerimiz ve veri akışı
kısmını kapsül ledik. Bunu yapmamızın nedeni ilerde verinin burada bir şekilde
kontrol edilme istegine cevap vermek adına ileriye yönelik bir çalışmadır .

public Ogrenci()

{

}

public Ogrenci(string ad, string soyad, string adres , string veliad, string
telno, int Dnot)

{

this.Ad = ad; this.Soyad = soyad; this.Adres = adres; this.VeliAdi = veliad;
this.TelefonNumarasi = telno; this.DiplomaNot = Dnot;

}

İki adet yapıcı metot tanımlaması gerçekleştirdik. ilk yapıcı metodumuz bos
olarak belirledik bunun nedeni xml olarak serileştireceğimiz zaman bir adet
boş yapıcı metot a ihtiyaç duymasıdır. Bu kısım çok önemlidir. Tüm kodlarımız
doğru bile olsa eğer boş bir yapıcı metot tanımlamadı isek yordamımız çalışmayacaktır.

Ardından normal yapıcı metodumuzu oluşturarak tipimize gelen verilerimizi property
tanımlamalarımızı kullanarak aktardık.

public override string ToString()

{

return string.Format("Adı : {0} Soyadi : {1} Adres {2} Veli Adi {3} Telefon
Numarasi {4} Diploma notu {5}", Ad, Soyad, Adres, VeliAdi, TelefonNumarasi,
DiplomaNot);

}

ToString () metodunu ezdik buradaki amacımız ise ToString() gibi hazır bir
metodumuz var diye düşünüp bu metodu bilgi ver seklinde kullanma isteğimizdir.

Yardimci.cs : bu class ımız bağlantı işlemlerimiz verileri aktarma ve xml ile
işleme kısmının bulunduğu kısımdır.

Kullandığımız isim alanları ve açıklamaları.

using System.Data.SqlClient; — Database ile işlemler yapmak için

using System.Configuration; — Olusturduğumuz app.config bağlantı ayar dosyamızı
connectionString olarak tanımlamak için

using System.IO; — Xml dosya olusturmak icin vericegimiz yol tanımını almak
ve olusturmak için kısacası dosyalama işlemleri için .

using System.Xml.Serialization; — Adından da anlaşılacağı gibi xml olarak
serilestirme işlemi icin gerekli olan kısım

SqlConnection con;

SqlCommand cmd;

Tanımlamamızda namespace kısmında SqlConnection ve SqlCommand tipinde iki adet
değişken olurduk tüm class içinde ihtiyaç duyduğumuz an çağırmak için en tepede
yani namespace kısmında belirledik .

public Yardimci()

{

con = new SqlConnection(ConfigurationManager.ConnectionStrings["Baglan"].ConnectionString);

}

Yardimci Kullan = new Yardimci () seklinde bir örnekleme kısmı olduğu zaman
yukarıdaki yapıcı metot çalışacaktır ve bağlantı yolumuzu köprülenecektir.

Bağlantı tanımlamamızda kullandığımız ConfigurationManager.ConnectionStrings["Baglan"].ConnectionString
tanımlamasında Syste.Configuration namespace ini en basta using ile uygulamamıza
belirttiğimiz için direk olarak eristik app.config kısmında tanımladığımız yol
tanımını string olarak belirlememizi sağladı bunun amacı pek çok yerde yol bağlantı
ayarlarını almak ve kullanmak zorunda isek bu şekilde app.config içerisine tanımlama
yapılarak connection name(ConnectionStrings["Baglan"] ) ismi ile çağrılabilinir
bu şekilde herhangi bir değişim olduğu zaman merkezi olarak yönetilebilirliği
sağlamak amacı ile yapılmıştır.

void BaglantiYonetimi()

{

if (con.State == System.Data.ConnectionState.Open)

{

con.Close();

}

else

{

con.Open();

}

}

Yordamımız içerisinde bağlantımızı pek çok kez açmak ve kapamak isteyebiliriz
ve doğal olarak en son bağlantımızı nasıl bıraktığımızı hatırlamak için kodumuzun
ilgili yerine bakmak zorunda kalırız . Bunu önlemek amacı ile BaglantiYonetimi
adında bir private metot kullanarak bağlantı durumunu if yapısını kullanarak
kontrol ettirip acık ise kapatılmasını kapalı ise açılmasını metot olarak yazmak
bize çalışma zamanında rahat bir yapı kazandıracaktır. Burada bağlantının durumları
Open ve Close ile sınırlı değildir. Bir çok durum için bu yapıyı daha da dallandırarak
kullanabiliriz.

public List<Ogrenci> OgrencileriAl()

{

List<Ogrenci> ogrencilerim = new List<Ogrenci>();

cmd = new SqlCommand("select Ad,Soyad,Adres,VeliAdi,TelefonNumara,EDiplomaNot
from Ogrenciler", con);

BaglantiYonetimi();

SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())

{

ogrencilerim.Add(new Ogrenci(dr["Ad"].ToString(), dr["Soyad"].ToString(),
dr["Adres"].ToString(), dr["VeliAdi"].ToString(), dr["TelefonNumara"].ToString(),
(int)dr["EDiplomaNot"]));

}

BaglantiYonetimi();

return ogrencilerim;

}

OgrencileriAl metodumuzu kullanarak database ilgili tabloya bağlanıp verilerimizi
çekeriz ve bunları daha önceden oluşturduğumuz ogrenci tipine koleksiyona değer
olarak belirterek içerisine aktarırız List<ogrenci> seklinde .

Simdi metodumuzu biraz açıklayalım …

1 . List<Ogrenci> ogrencilerim = new List<Ogrenci>(); şeklinde
bir list<> generic koleksiyon oluşturduk ve bu list generic koleksiyonumuzun
sadece öğrenci tipi veya bu tip den türetilmiş tipleri kabul etmesini istediğimizi
belirledik ama biz bu uygulamada herhangi bir kalıtım kullanmadığımız için burada
öğrenci tipi için geçerlidir.

2. cmd = new SqlCommand("select Ad,Soyad,Adres,VeliAdi,TelefonNumara,EDiplomaNot
from Ogrenciler", con);

BaglantiYonetimi();

Cmd sqlcommand içerisine tsql komutumuzu yazdık normal şartlarda bu şekilde
tsql kodun uygulama içerisine yazılması önerilmez bunun yerine ogrencilerilistele
adında bir procedure SQL tarafında oluşturulur ve bu procedure nin geri dönüş
değerlerine göre yakalanıp uygulamaya aktarılır ama bizim amacımız burada xml
olarak serileştirme işlemini anlatmak bir başka makalemde bu kısma detaylı olarak
değineceğiz derinlemesine araştıracağız!

BaglantiYonetimi metodumuzu kullanarak bağlantımızı kontrol ettik bu durumda
bağlantımızı hiç open etmediğimiz için bağlantımız açılacaktır.

3 . SqlDataReader dr = cmd.ExecuteReader();

SqlDataReader tipinden dr adında bir değişken belirledik ve cmd sqlcommand
mızı execute.read() komutunu vererek sql sorgumuzun tüm sonucunu dr attık .
SqlDataReader kamyon gibi düşüne bilirsiniz tüm verileri yüklendi ama bu verileri
bir baksa yere boşaltmadan kullanamayız SqlDataReader sadece verileri gider
alır gelir. Bağlantımızı köprü SqlDataReader ımızıda kamyon gibi düşünün .

4 . while (dr.Read())

{

ogrencilerim.Add(new Ogrenci(dr["Ad"].ToString(), dr["Soyad"].ToString(),
dr["Adres"].ToString(), dr["VeliAdi"].ToString(), dr["TelefonNumara"].ToString(),
(int)dr["EDiplomaNot"]));

}

BaglantiYonetimi();

return ogrencilerim;

}

While döngüsünü kullanarak Sqldatareader tipindeki dr değişkenimizin son satırına
kadar döngümüzü çalışmasını sağladık .

Şimdi kamyonumuzdaki ( SqldataReader ) içerisindeki verilerimizi List<ogrenci>
tipindeki öğrencilerim koleksiyonuna ekleme sırası geldi ve öğrencilerim.add(
dr[“Ad”].toString() seklinde tüm kolonlarımızı yazarak koleksiyonumuza ekledik
ve daha sonra bağlantı yönetimi metodumuzu kullanarak bağlantımızı kapattık
.

Burada önemli olan tek kural bağlantıyı ihtiyacımız olduğu zaman açmak işimiz
bittiği zaman kapatmak olacaktır . bu şekilde çalışır isek yordamımız için daha
fazla güç harcanmaz.

Return ogrencilerim ile metodumuz dışına koleksiyonumuzu aktardık.

5 . public void XmlSerilestir(List<Ogrenci> GelenOgrenciler, string Path)

{

XmlSerializer seriliazer = new XmlSerializer(typeof(List<Ogrenci>));

FileStream YolTanimi = new FileStream(Path, FileMode.Create);

seriliazer.Serialize(YolTanimi, GelenOgrenciler);

YolTanimi.Close();

Console.WriteLine("Basarili Oldu");

}

Ve xml serileştirme metodumuz. metodumuz bizden List<ogrenci> tipinden
GelenOgrenciler ve string tipinden Path tanımı istemektedir.

XmlSerializer seriliazer = new XmlSerializer(typeof(List<Ogrenci>));
kısmında örneklememizi yaptık .

FileStream YolTanimi = new FileStream(Path, FileMode.Create); filestream ile
bir kanal açtık ve Path tanımına gelen c:ogrenci.xml adı için filemode.create
kısmında adı verilen yola adı verilen dosyayı açma kısmını tanımladık .

seriliazer.Serialize(YolTanimi, GelenOgrenciler); bölümünde xml çevirme işlemimiz
tamamlanmıştır. Artık tek yapmamız gereken

YolTanimi.Close();

İle kanalımızı kapatmak tır.

Makalemiz boyunca sql server tarafında bir tabloya bağlanarak bilgileri alıp
xml e çevirme işlemi anlatılmıştır .

Umarım yararı olmuştur .