Makale Özeti

SQL CE veritabanında bir tablo yaratıp bu tabloya veri ekleme işlemi yapacağız.

Makale

POCKET PC'DE SQL CE KULLANIMI -II


Bir önceki yazımızda Visual Studio .Net 2003 ile SQL CE kullanarak Pocket PC veya Windows CE üzerinde nasıl veritabanı işlemleri yapabileceğimize giriş yapmıştık ve bu amaçla bir tane veritabanı oluşturmayı ve tablo oluştururken kullanabileceğimiz veri tiplerini görmüştürk. Şimdi de oluşturduğumuz  bu veritabanında bir tablo yaratıp bu tabloya veri ekleme işlemi yapacağız.

 


I) Önceki uygulamamızda veritabanımınız yaratmıştık. Şimdi de tablomuzu yaratmak için tablomuzun adını TextBox'ımıza girelim ve de Tablo Yarat tuşuna basalım. Şimdi de bu işlem için gerekli kod parçasını inceleyelim:

 

public SqlCeConnection CreateConnection()
{//Yeni bir SqlCeConnection'ı yarat.
SqlCeConnection conn = new SqlCeConnection("DataSource = \\My Documents\\" + databaseName);
return conn;//Yaratılan bağlantıyı geri döndür.
}

 

private bool CreateTable()
{//CreateConnection metodunu kullanarak bağlantı oluştur.
SqlCeConnection conn = CreateConnection(databaseName);
//Daha önceden yaratılmış conn nesnesinin CreateCommand() metodunu kullanarak yeni bir SqlCeCommand yarat.
SqlCeCommand command = conn.CreateCommand();
//command'ın CommandText'ine tabloyu yaratmak için gerekli sorgumuzu yazıyoruz. Bu tabloda en çok kullanılan veri tiplerini içerecek şekilde kolonları ekliyoruz. AboneNo tamsayı tipinde ve anahtar saha, Bolge sahası kayan noktalı, Kayitli sahası 0 veya 1 değerleri alabilecek bit tipinde, KayitTarihi ise DateTime tipinde.
command.CommandText = "Create TABLE " + tableName + " (AboneNo int PRIMARY KEY, Bolge float, Kayitli Bit, KayitTarihi DateTime)";
try
{
conn.Open(); //Bağlantıyı aç
command.ExecuteNonQuery();//command'ı işlet.
conn.Close();//Bağlantıyı kapat.
conn.Dispose();//Bağlantı nesnesini bellekten sil. Kullanılmayacak bir nesneyi tutmaya gerek yok.
return true;//İşlem doğru yapıldığına dair true değeri döndür.
}
catch(Exception ex)//Hata varsa yakala.
{
string hata = ex.ToString();//Hatayı stringe çevir.
MessageBox.Show(hata);//Hatayı Mesaj kutusu ile göster.
return false;//İşlemin yapılamadığına dair false değeri döndür.
}
}

 

 

II) conn.Close(); satırına dikkat edecek olursak, ADO.NET kullandığımız Windows veya Web uygulamarından daha farklı bir işlem yaptığımızı görürürüz. Normal şartlarda ADO.NET'te Bağlantı Havuzu(Connection Pooling) avantajlarından yararlanmak için yaratılan Connection nesnesini bellekten tamamen atmayız, sadece bağlantı nesnemizin konumunu Close yaparak havuza geri dönmesini sağlardık. Ancak SQL CE'de bağlantı havuzu desteği olmadığı gibi herhangi bir anda bir veritabanına sadece 1 bağlantı izni verdiği için yaratılan her bağlantı işi bittikten sonra kapatılmak zorundadır. Bunun sebebi de kısıtlı belleklerle çalışıldığı için herhangi bir anda sadece bir tane açık bağlantıya izin vermesidir. Bağlantıyı kapatmazsanız bir daha aynı veritabanına erişmek istediğinizde bağlantıyı açarken  tipik dosya işlemleri mantığındaki gibi dosya kullanımda hatası ile karşılaşırsınız.

 

III) Şimdi de örnek bir kayıt girmek için gerekli kod bloğumuza bakalım; 

 

public bool AddAboneRow(int aboneNo, float bolge, int kayitli, DateTime kayitTarihi)
{//Yeni bir SqlCeConnection'ı yarat.
SqlCeConnection conn = CreateConnection(databaseName);
//Daha önceden yaratılmış conn nesnesinin CreateCommand() metodunu kullanarak yeni bir SqlCeCommand yarat.
SqlCeCommand sqlInsertRow = conn.CreateCommand();
sqlInsertRow.CommandText = "INSERT INTO ABONE (AboneNo, Bolge, Kayitli, KayitTarihi)";
sqlInsertRow.CommandText += " VALUES("+aboneNo+","+bolge.ToString().Replace(",",".")+", "+ kayitli+","+kayitTarihi.ToString("MM/dd/yyyy")+")";
//Burada kayan noktalı sayılardaki "," leri "." ile değiştiriyoruz. Bunun sebebi de bölgesel ayarları türkçe olan bir bilgisayarda kayan noktalı sayılar virgülle ayrıldığı için içerikleri stringe çevrildiği zaman 2 ayrı kolona denk geliyormuş gibi gözükmelerinden ve kolon sayısını 1 fazla göstermeleridir.
try
{
conn.Open();//Bağlantıyı aç
}
catch(Exception ex)//Hata varsa yakala.
{
MessageBox.Show("Veritabanı açılırken hata oldu:" + ex.ToString());
return false;//İşlemin yapılamadığına dair false değeri döndür.
}

try
{
sqlInsertRow.ExecuteNonQuery();//command'ı işlet.
}
catch(Exception ex)//Hata varsa yakala.
{
MessageBox.Show("Query işletilirken hata oldu:" + ex.ToString());
if(conn.State==ConnectionState.Open)
conn.Close();//Bağlantıyı kapat.
conn.Dispose();//Bağlantı nesnesini bellekten sil.
return;
}
conn.Close();//Bağlantıyı kapat.
return true;//İşlemin doğru yapıldığına dair true değeri döndür.
}

 

IV) Şimdi de Örnek Kayıt Gir tuşunun tıklanmasıyla yukarıdaki metodun çağrılmasını sağlayan koda bakalım.

 

private void btnAddRow_Click(object sender, System.EventArgs e)
{
AddAboneRow(1,(float)1.5,0,DateTime.Now);//İlk olarak int tipinde anahtar saha gönderiyoruz. İkinci olarak da kayan noktalı tipine çevirdiğimiz 1.5 değeri gidiyor, son olarak da o anki tarihi gönderiyoruz.
}

 

V) Son olarak da basit bir seçme(select) işlemi yapalım. Burada da SqlCeDataAdapter kullanalım.

 

private void btnSelect_Click(object sender, System.EventArgs e)
{//Yeni bir SqlCeConnection'ı yarat.
SqlCeConnection conn = CreateConnection();
SqlCeDataAdapter da = new SqlCeDataAdapter("select * from "+ tableName,conn);//Yeni bir SqlCeDataAdapter nesnesi yarat.
DataTable dt = new DataTable();//Yeni DataTable nesnesi yarat.

try
{
conn.Open();//Bağlantıyı aç.
da.Fill(dt);//Yaratılan da vasıtasıyla dt nesnesini doldur.
conn.Close();//Bağlantıyı kapat.
conn.Dispose();//Bağlantıyı bellekten at.
}
catch(Exception ex)//Hata varsa yakala.
{
MessageBox.Show(ex.ToString());//Hatayı Mesaj kutusu ile göster.
if(conn.State==ConnectionState.Open)//Eğer bağlantı durumu açıksa bağlantıyı kapat.
conn.Close();
return;//İşleme devam etmeden geri dön.
}
dataGrid1.DataSource=dt;//datagrid1 nesnesine veri kaynağı olarak dt Tablosunu ver.
}

 


Bu yazımızla birlikte Pocket PC'ler üzerinde çalışabilecek asit bir Smart Device Uygulaması ile SQL CE 2.0 kullanarak veri erişimi yapmış olduk. Uygulamanın tamamını indirmek için tıklayınız.

Aytaç ÖZAY

Ornek Kodlar