14 Mart 2013 Perşembe

C# ile System.Data Namespace

Merhaba Webkolog dostları,

Bugün sizlere C# .NET Framework 4'ün kalbinde yer alan ve veri manipülasyonunun temelini oluşturan System.Data namespace'ini anlatacağım. Veritabanı bağlantısı kurmak, sorgular çalıştırmak kadar önemli olan, bellekteki veriyi etkili bir şekilde yönetmek ve işlemek için System.Data sınıflarını yakından tanımamız gerekiyor. Haydi bu önemli konuya birlikte dalalım!

---

System.Data Nedir ve Neden Önemlidir?

System.Data namespace'i, .NET uygulamalarının veritabanları ve diğer veri kaynaklarıyla etkileşim kurmasını sağlayan sınıfları içerir. Özellikle Disconnected Mimari (Bağlantısız Mimari) içerisinde, veritabanından alınan veriyi bellekte tutmamızı, üzerinde işlemler yapmamızı ve daha sonra bu değişiklikleri geri veritabanına göndermemizi sağlayan güçlü araçlar sunar. Bu, özellikle performans ve ölçeklenebilirlik açısından büyük avantajlar sağlar.

Bu namespace içerisinde sıkça kullanacağımız temel sınıflar şunlardır:

  • DataTable: Bellekteki tek bir veritabanı tablosunu temsil eder.
  • DataRow: Bir DataTable içindeki tek bir satırı temsil eder.
  • DataColumn: Bir DataTable içindeki tek bir sütunu (kolonu) temsil eder.
  • DataSet: Bir veya daha fazla DataTable nesnesi içerebilen, bellekteki veritabanı benzeri bir yapıdır. İlişkisel verileri yönetmek için kullanılır.
  • DataView: Bir DataTable üzerinde filtrelenmiş veya sıralanmış bir görünüm sağlar. Veri gösterimini kontrol etmek için idealdir.

Şimdi gelin, bu sınıfları nasıl kullanacağımıza dair örneklerle konuyu pekiştirelim.

---

Temel System.Data Sınıflarının Kullanımı

Öncelikle, bu sınıfların nasıl örneklendiğine bakalım:

using System.Data; // System.Data namespace'ini eklemeyi unutmayın!

DataTable dt = new DataTable();
DataRow dr = dt.NewRow(); // DataRow, ait olduğu DataTable üzerinden oluşturulur
DataSet ds = new DataSet();
DataColumn dc = new DataColumn();
DataView dv = new DataView();

DataColumn Kullanımı:

Bir DataColumn, bir tablodaki bir sütunun özelliklerini tanımlar. Sütun adı, veri tipi, varsayılan değeri gibi bilgileri burada belirleyebiliriz.

// Bir DataColumn nesnesi oluşturuyoruz
DataColumn dcId = new DataColumn();

// Sütunun veri tipini belirliyoruz. System.Int32, C# int'e karşılık gelir.
dcId.DataType = System.Type.GetType("System.Int32");

// Sütun başlığını (Caption) belirliyoruz. Bu genellikle UI'da gösterilen isimdir.
dcId.Caption = "ID";

// Sütun adını belirliyoruz. Bu, kodda sütuna erişirken kullanacağımız isimdir.
dcId.ColumnName = "Id";

// Sütunun otomatik artan olup olmayacağını belirliyoruz
dcId.AutoIncrement = true;

// Otomatik artan değerin başlangıç değerini belirliyoruz
dcId.AutoIncrementSeed = 1;

// Otomatik artan değerin artım miktarını belirliyoruz
dcId.AutoIncrementStep = 1;

// Sütunun birincil anahtar olup olmadığını belirliyoruz
// dt.PrimaryKey = new DataColumn[] { dcId }; // DataTable'a ekledikten sonra ayarlanır

DataTable Oluşturma ve Sütun Ekleme:

Bir DataTable oluşturup, daha önce tanımladığımız DataColumn'ları bu tabloya ekleyebiliriz.

DataTable myTable = new DataTable();

// Tabloya bir isim veriyoruz
myTable.TableName = "Kullanicilar";

// Daha önce tanımladığımız ID sütununu tabloya ekliyoruz
myTable.Columns.Add(dcId);

// Yeni bir sütun daha ekleyelim, doğrudan ad ve tip belirterek
myTable.Columns.Add("Ad", typeof(string));
myTable.Columns.Add("Soyad", typeof(string));
myTable.Columns.Add("Yas", typeof(int));

// Birincil anahtar tanımlama (tabloya eklendikten sonra yapılır)
myTable.PrimaryKey = new DataColumn[] { myTable.Columns["Id"] };

DataRow Oluşturma ve Tabloya Ekleme:

DataRow, DataTable'ın satırlarını temsil eder. Bir DataRow oluşturup, sütunlarına değerler atayarak tabloya ekleyebiliriz.

// Yeni bir satır oluşturuyoruz
DataRow newRow = myTable.NewRow();

// Sütunlara değer atıyoruz
newRow["Ad"] = "Ali";
newRow["Soyad"] = "Yılmaz";
newRow["Yas"] = 30;

// Satırı tabloya ekliyoruz
myTable.Rows.Add(newRow);

// Bir başka satır ekleyelim
DataRow anotherRow = myTable.NewRow();
anotherRow.ItemArray = new object[] { DBNull.Value, "Ayşe", "Demir", 25 }; // ID otomatik artan olduğu için DBNull.Value kullanabiliriz
myTable.Rows.Add(anotherRow);

// Tablodaki verilere erişim
Console.WriteLine("İlk satırın Adı: " + myTable.Rows[0]["Ad"]);
Console.WriteLine("İkinci satırın Yaşı: " + myTable.Rows[1]["Yas"]);

DataSet Kullanımı:

Bir DataSet, birden fazla DataTable'ı barındırabilen bir koleksiyondur. Bu sayede, ilişkili tabloları bellekte bir arada tutabiliriz.

DataSet myDataSet = new DataSet("KullaniciVerileri"); // DataSet'e isim verebiliriz

// Daha önce oluşturduğumuz DataTable'ı DataSet'e ekliyoruz
myDataSet.Tables.Add(myTable);

// Yeni bir DataTable daha oluşturalım ve DataSet'e ekleyelim
DataTable adresTable = new DataTable("Adresler");
adresTable.Columns.Add("AdresId", typeof(int)).AutoIncrement = true;
adresTable.Columns.Add("KullaniciId", typeof(int));
adresTable.Columns.Add("Sehir", typeof(string));
adresTable.Columns.Add("Ilce", typeof(string));

myDataSet.Tables.Add(adresTable);

// DataSet içindeki tablolara erişim
Console.WriteLine("DataSet'teki ilk tablo adı: " + myDataSet.Tables[0].TableName);
Console.WriteLine("DataSet'teki ikinci tablo adı: " + myDataSet.Tables["Adresler"].TableName);

DataView ile Filtreleme ve Sıralama:

DataView, bir DataTable üzerinde belirli kriterlere göre veri göstermek istediğimizde çok kullanışlıdır. Gerçek veriyi değiştirmeden, sadece bir görünüm sunar.

DataView myDataView = new DataView(myTable);

// Yaşı 28'den büyük olanları filtrele
myDataView.RowFilter = "Yas > 28"; 

// Ad'a göre sırala (ASC: Artan, DESC: Azalan)
myDataView.Sort = "Ad ASC";

Console.WriteLine("\nFiltrelenmiş ve Sıralanmış Veriler:");
foreach (DataRowView rowView in myDataView)
{
    Console.WriteLine($"ID: {rowView["Id"]}, Ad: {rowView["Ad"]}, Yaş: {rowView["Yas"]}");
}

// Filtreyi temizlemek için boş string atayabiliriz
// myDataView.RowFilter = "";
---

Gördüğünüz gibi, System.Data namespace'i, bellekteki veriyi etkin bir şekilde yönetmek için zengin bir yapı sunuyor. Özellikle DataSet ve DataTable'lar, veritabanından bağımsız olarak veri üzerinde çalışmamıza ve uygulamalarımızı daha esnek hale getirmemize olanak tanıyor. Bu sınıfları ustaca kullanmak, .NET geliştiricisi olarak yeteneklerinizi bir üst seviyeye taşıyacaktır.

Umarım bu makale, System.Data'nın temel taşlarını anlamanıza yardımcı olmuştur. Kendi projelerinizde bolca kullanarak pratik yapmayı unutmayın!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve keyifli öğrenme süreçleri dilerim!

0 yorum:

Yorum Gönder