Ana Sayfa > ADO.NET > ADO.Net ile Excel tablolarına DB gibi baglanmak

ADO.Net ile Excel tablolarına DB gibi baglanmak

30 Nisan 2010

Excel dosyalarına aynen bir DB gibi erişmek, ADO.Net ile kolayca mümkün oluyor. Pek bir alternatif olarak sayılmasada, çogu zaman ihtiyaç duyula
bilmektedir. ADO.Net ile bu işlemi gerçekleştirmek, 2 aşamada mümkün oluyor.


1. Her hangi bir Excel dosyasındaki belirledigimiz bir hücre grubunu ilk olarak tanımlamamız gerekiyor. ADO.Net bu tanımladıgımız alanlari sanki bir veri tablosu gibi
algılayacak. Benim örnek oluşturdugum tablo aşagıdaki gibidir



Tablomuzu oluşturduktan sonra, "Insert -> Names -> Define" ile üzerinde çalışacagımız tabloyu ve verilerini oluşturacagız.

 

"Define" kısmında gelen pencerede, ben "isimler" diye bir define tanımladim (yani tablomun adı "isimler"), "Add" tuşunana basmadan önce aşagıdaki "Refers to:" kısmına hangi hücreleri kapsadıgını seçmemiz gerekmektedir.



        Tıpkı aşagıdaki gibi, ilgili alanı seçiyoruz.
 

                       

A1 den B7 e kadarlık hücre blogunun hepsini "isimler" olarak tanımladık. Artık kaydedip cıkabiliriz.

2. Bu kısımda ise C# da erişim yolunu görecegiz;

İlk olarak
using
System.Data.OleDb;
uzay ismini eklemeyi unutmuyoruz.
Ben aşagıdaki gibi oldukca basit bir form hazırladım, bir listview ve bir
buttondan oluşuyor.


private

void btn_XLSden_Click(object
sender, System.EventArgs e)
{
       //connection stringimiz
       //bin klasorumuzn icindeki derledigimiz
EXE ile aynı klasorun iceresinde
       string connstr =
"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=Deneme.XLS;Extended Properties="Excel 8.0;HDR=Yes;IMEX=2""
;

       // EXCEL dosyamızı açıyoruz ve okuyoruz
       OleDbConnection conn = new
OleDbConnection(connstr);
       conn.Open();
             //isimler
tablosu aslında Excel dosyamızda define ile tanimladigimiz alanin ismi
             OleDbCommand cmd = new
OleDbCommand("Select * From isimler",conn);
             OleDbDataReader dtr = cmd.ExecuteReader();

    
        //eger tablo bos degil ise
             //kolon isimlerini alıp
listview in kolonlarını olusturuyoruz
             for(int
i=0;i<=dtr.FieldCount-1;++i)
            
listview1.Columns.Add(dtr.GetName(i),65*(i+1),HorizontalAlignment.Center); 


             //tek tek okuyoruz ve listviewe ekliyoruz
             ListViewItem satir = new
ListViewItem();
             while(dtr.Read())
                    {
                           satir = listview1.Items.Add(dtr[0].ToString());
                           satir.SubItems.Add(dtr[1].ToString());
                    }
             //sonlandırıyoruz
              dtr.Close();
       conn.Close();
}

Fazladan bir açıklama yapmaya gerek duymuyorum, gerekli
açıklamaları comment olararak kodlarla birlikte yaptım. Gördügünüz gibi oldukca
basit, diger işlemleride sıradan ADO.Net commandları ile
gerçekleştirebilirsiniz.

ConnectionString dogru yapıldıgı anda hiç bir sorunla
karşılaşmazsınız.


"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Deneme.XLS;Extended
Properties="Excel 8.0;HDR=Yes;IMEX=2""

Buradaki "Deneme.XLS"in yeri farklı bir klasorde ise
c:\denemeler\deneme.XLS gibi
yerini gösterebilirsiniz. Hepinize çalışmalarınızda başarılar diliyorum, kolay
gelsin…