C# ile Excel Servis Kullanmadan OleDbConnection Kullanarak Excel Dosyasını Veri Tabanı Gibi Gösterip Dataları Okumak

Merhaba arkadaşlar bugün sizlere C# ile excel servisi kullanmadan OleDbConnection ile excel database olarak tanıtım sorgu atarak vs içindeki datalara ulaşmayı ve bunları çekmeyi anlatacağım.

Bu işlem genellikler server tarafında çalışan ve excel servis kurulmaması gereken durumlarda kullanılabilecek pratik bir çözümdür.

Not: OleaDbConnection ile excel e bağlanabilmek için kodun çalışacağı ortamda “Microsoft Access Database Engine 2010 Redistributable” kurulu olması gerekmektedir. Eğer kurulu değil ise “The ‘Microsoft.ACE.OLEDB.12.0’ provider is not registered on the local machine.” şeklinde bir hata ile karşılaşabilirsiniz.

İlk olarak örnek bir excel dosyası oluşturuyoruz ve adını “Sample.aspx” olarak veriyoruz ve içinde istediğimiz gibi verilerimiz ile dolduruyoruz.

Bu dosyamızı nerede tutmak istiyorsak oraya ekliyoruz. Ben dosyayı “C:\” de tutuyor olacağım.

Aşağıdaki kod ile excel içindeki verileri okuyabiliriz.

string path = @"C:\Sample.xlsx";
DataTable sheet1 = new DataTable();
OleDbConnectionStringBuilder csbuilder = new OleDbConnectionStringBuilder();
csbuilder.Provider = "Microsoft.ACE.OLEDB.12.0";
csbuilder.DataSource = path;
csbuilder.Add("Extended Properties", "Excel 12.0 Xml;HDR=NO");
using (OleDbConnection connection = new OleDbConnection(csbuilder.ConnectionString))
{
connection.Open();
string selectSql = @"SELECT * FROM [Sheet1$]";
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectSql, connection))
{
adapter.Fill(sheet1);
foreach (DataRow row in sheet1.Rows)
{
foreach (object item in row.ItemArray)
{
Console.WriteLine(item.ToString());
}
}
Console.ReadLine();
}
connection.Close();
}

Kod kısmında dikkat edilmesi gereken kısımlar:

  • “path” değişkenine excel dosyamızın doğru konumunu ve adını uzantısı ile birlikte vermeniz gerekmektedir.
  • “csbuilder” değişkenine “Extended Properties” leri eklediğim kısımda yer alan “HDR” özelliği “YES” olarak kalırsa excelde ilk satırı “Header” olarak alacaktır ama bu özelliği “NO” olarak tanımlanırsa header kullanmadan tüm satırları okuyacaktır.
  • “selectSql” değişkenine excel kısmında yer alan herbir sheet kısmını tablo olarak düşünerek istediğiniz gibi sql sorguları yollayabilirsiniz.
  • “selectSql” değişkeninde yer alan “[Sheet1$]” kısmı sizin ezcelde hangi sheet sayfasını okumak istiyorsanız onun ismini yazmanız gerekmektedir. Yukarıdaki görselde de gördüğünüz gibi ben “Sheet1” sayfasını kullanacağım için kod kısmında da o yazmaktadır.

Ben yukarıdaki kodu standart ayarları ile bırakıp kodu çalıştırdığımda aşağıdaki gibi bir ekran gelecektir.

Gördüğünüz gibi yukarıdaki excel dosya görselimde yer alan tüm dataların geldi. 🙂

 

Bir Cevap Yazın