Dataset, Veri kaynagindan (veritabani xml dosyasi) yakalanmis bir verinin hafizada keslenmesini saglar ve ADO.NET mimarisinin önemli komponenti durumundandir. Bir önceki makalemizde datasetimizin içerisine bir tane datatable eklemis ve daha fazla DataTable'inda eklenebilecegini belirtmistik. Datasetler; DataRelation objesiyle iliskilendirilen DataTable koleksiyonlaridir. Table'lar arasinda UniqueConstraint and ForeingConstraint objeleri ile veri bütünlügünü artirabiliriz. Veri tabanlarimizdaki veri bütünlügünü de bu sekilde programlara yansitmis oluruz. Bu konuyla ilgili örnegimiz asagida yer almaktadir.
Asagidaki örnekte iller tablosu ve ilçeler tablosunu dinamik olarak kodlarla nasil iliskilendirecegimizi görecegiz. Ilceler Tablosu (PK_Ilce_ID, Ilce_Ad) Iller Tablosu (PK_Il_ID, FK_Ilce_ID, Il_Ad) olsun .
private static void VeriBaglantisi(string connectionString)
{
//Belirtecegimiz baglanti cümleri ile veritabani baglantisi gerçeklestirilir
using (SqlConnection connection = new SqlConnection(connectionString))
{
// Ilceler Tablsu için SqlDataAdapter olusturulur
SqlDataAdapter adapter = new SqlDataAdapter();
// Bir tablo adi ile map edilir
adapter.TableMappings.Add("Table", "Iller");
// Baglanti açilir
connection.Open();
// Ilce verilerini getirmek üzere SqlCommand olusturulur
SqlCommand command = new SqlCommand(
"SELECT PK_Il_ID, Il_Ad FROM dbo.Iller;",
connection);
command.CommandType = CommandType.Text;
// SqlDataAdapter in SelectCommand set edilir
adapter.SelectCommand = command;
// DataSet içi doldurulur.
DataSet dataSet = new DataSet("Iller");
adapter.Fill(dataSet);
// Ayni islemler Iller tablosu için gerçeklestirilir
// Ilclerer tablosu Il tablosunun çocugu durumundadir
SqlDataAdapter ilcelerAdapter = new SqlDataAdapter();
ilcelerAdapter.TableMappings.Add("Table", "Ilceler");
SqlCommand ilcelerCommand = new SqlCommand(
"SELECT PK_Ilce_ID, Ilce_Ad FROM dbo.Ilceler;",
connection);
ilcelerAdapter.SelectCommand = ilcelerCommand;
// DataSet içi doldurulur.
ilcelerAdapter.Fill(dataSet);
// baglanti kapatilir
connection.Close();
// Iki tablo arasinda iliski kurulur
// based on the SupplierID.
DataColumn anaColumn =
dataSet.Tables["Iller"].Columns["PK_Il_ID"];
DataColumn cocukColumn =
dataSet.Tables["Ilceler"].Columns["FK_Il_ID"];
DataRelation iliskilendirme =
new System.Data.DataRelation("IllerIlceler",
anaColumn, cocukColumn);
dataSet.Relations.Add(iliskilendirme);
}
}
Böylelikle her yeni bir ilce olustugunda var olamayan bir ili Ilceler tablosuna koymamiza olanak kalmayacaktir. Veri bütünlügü bu sayede veritabanin disina çikmistir ve tablolar arasindaki iliskiler olasi hatalarin önüne geçmemize yardimci olacaktir.