Makale Özeti

Bu makalede Microsoft Office ailesinin bir ürünü olan Excel’de hazırlanmış .xls dosyalarında belirli bir şekilde tanımlanmış olan bilgilere ADO .NET nesneleri ile nasıl ulaşacağımız konusuna değineceğim. .xls dosyasından aldığımız ve görüntülediğimiz bilgileri daha sonra örnek bir kod ile MS SQL Server veritabanına yazdıracağız.

Makale

 

Bu makalede Microsoft Office ailesinin bir ürünü olan Excel’de hazırlanmış .xls dosyalarında belirli bir şekilde tanımlanmış olan bilgilere ADO .NET nesneleri ile nasıl ulaşacağımız konusuna değineceğim. .xls dosyasından aldığımız ve görüntülediğimiz bilgileri daha sonra örnek bir kod ile MS SQL Server veritabanına yazdıracağız.

Bildiğimiz gibi MS Excel programı verileri saklamamızı ve bu veriler üzerinde işlemler yapabilmemizi sağlamaktadır. Peki bu verilere .NET ortamında nasıl ulaşabiliriz? Bu aşamaya geçmeden, öncelikle bu işlemi yapabilmemiz için Excel’de dosyamızı ne şekilde hazırlamamız gerektiğini anlatacağım.

Hazırlayacağım örnekte bir sınıftaki öğrencilerin isimlerinin ve 3 tane sınav notlarının bilgilerini Excel dosyamızda tutalım. Açtığımız Excel dosyasında 4 adet sütunumuz olsun. “AdSoyad”, “Sinav1”, “Sinav2” ve “Final” sütunları. Daha sonra bu sütunların altlarını gerekli bilgilerle dolduralım.

Bilgilerin olduğu alanı seçerek bu alana bir ad veriyoruz, böylece seçili alanımız tanımlı bir hale geliyor. Bunun için Ekle > Ad > Tanımla menüsünü seçiyoruz ve buradan bu alana vereceğimiz ismi yazıp (Bu uygulamada ben NotTablosu adını verdim) önce “Ekle” diyor ve daha sonra eklenen bu isim seçili iken “Tamam” diyoruz.

Artık Excel dosyası ADO .NET tarafından kullanılabilecek formattadır. Bu haliyle Excel dosyasını bir Access veritabanı dosyası gibi düşünebiliriz. Burada; NotTablosu tablo adı, AdSoyad, Sınav1, Sınav2 ve Final ise alan adlarıdır. Dosyayı Notlar_1.xls olarak kaydedelim ve dosyayı kapatalım. (Zaten dosya açıkken uygulamamızı çalıştırırsak hata verecektir.)

Burada dikkat etmemiz gereken önemli bir nokta var. İlk satırımızda yer alan AdSoyad, Sinav1, Sinav2 ve Final bilgileri alan adı olarak algılanacaktır ve veritabanına eklemeye çalıştığımızda ilk satırımızdaki bu bilgiler alınmayacaktır. Dosyadaki bilgileri SQL komutuyla filtreleyerek, istediğimiz satırları ve bilgileri çekebileceğiz. Örnek olarak “SELECT * FROM NotTablosu WHERE Final=80” şeklindeki bir komut, bize bu tabloda Final notunun 80’e eşit olduğu satırları getirecektir.

Şimdi sıra geldi ADO .NET ile Excel dosyamıza bağlanmaya ve verileri almaya. Bunun için bir uygulama oluşturuyoruz. Ben örnek olarak bir ASP .NET Web Uygulaması oluşturuyorum. Uygulamamızdaki WebFrom1.aspx dosyasına bir buton ve 1 datagrid nesnesi ekliyorum. Butona tıkladığımda Excel dosyasındaki veriler alınarak datagride yüklenecek. Uygulamanın kodlarına gelince; öncelikle veritabanı ile ilgili işlemler için System.Data.OleDb (Excel dosyasına bağlanmamız için gerekli) ve System.Data.SqlClient isim alanlarını uygulama kodlarının başlangıcına ekleyip butonun Click Event’ ine aşağıdaki kodları yazıyoruz.

 ' Dosyaya bağlanmak için gerekli olan bağlantı stringini
Dim ConnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("Notlar_1.xls") & ";" & "Extended Properties=Excel 8.0;"

Dim Conn As New OleDbConnection(ConnStr)
Conn.Open()

Dim MyCommand As New OleDbCommand("SELECT * FROM NotTablosu", Conn)

Dim da As New OleDbDataAdapter
da.SelectCommand = MyCommand

da.Fill(dt)

 ' Verileri daha sonra da kullanabilmek için session içerisinde tutuyoruz
Session("Veriler") = dt

 ' Verinin görüntüleneceği DataGrid in DataTable a bağlanması ve verinin yüklenmesi
DataGrid1.DataSource = dt.DefaultView
DataGrid1.DataBind()
Label1.Text = "Excel dosyasından veri alındı"

Conn.Close()


Kodlardan da anlayacağınız gibi genel yapı bir Access veritabanından veri almakla hemen hemen aynı. Tek farklılık Excel dosyasına bağlandığımızı belirten ConnStr değişkenindeki Extended Properties=Excel 8.0 bilgisi. Sonraki aşamada projemizi çalıştırıp açılan formdaki Veriyi Yükle butonuna tıkladığımızda datagrid Notlar_1.xls dosyasındaki tanımlı alandaki verilerle dolacaktır. (Önemli bir not: Notlar_1.xls dosyasının uygulamamızla aynı yerde bulunması gerekmektedir.)

Bu kısma kadar bir xls dosyasında tanımladığımız alandaki bilgileri ADO .NET nesnelerii ile nasıl alabileceğimizi anlatmaya çalıştım. Şimdi elimizdeki bu verileri basit bir örnekle veritabanına kaydetmeye çalışalım. WebForm1.aspx dosyasına Veritabanına Kaydet adında bir buton ekliyorum ve butonun Click Event’ ine aşağıdaki kodları yazıyorum.

Dim ConnStr As String = "data source=.;persist security info=False;initial catalog=Deneme;user id=UserDeneme;pwd=123"

Dim Conn As New SqlConnection(ConnStr)
Conn.Open()

Dim sayi As Integer

' Session içerisinde tutulan verilerin alınması
dt = Session("Veriler")

For sayi = 0 To dt.Rows.Count - 1

Dim SqlStr As String = "INSERT INTO Notlar (AdSoyad, Sinav1, Sinav2, Final) " & _
"VALUES ('" & dt.Rows(sayi)(0) & "', " & dt.Rows(sayi)(1) & ", " & dt.Rows(sayi)(2) & ", " & dt.Rows(sayi)(3) & ")"

Dim MyCommand As New SqlCommand(SqlStr, Conn)
Dim da As New SqlDataAdapter

da.SelectCommand = MyCommand
da.Fill(dt)

Next

Label1.Text = "Veriler veritabanına yazıldı"
Conn.Close()

Kodlardan ve açıklama satırlarından da anlayacağınız gibi dt adlı DataTable içerisindeki verileri bir for döngüsü içerisinde satır satır çekerek döngünün her dönmesinde bir satırı MS SQL Server içerisinde varolan “Deneme” veritabanındaki “Notlar” tablosuna ekledik. Bu tabloyu kendi veritabanınıza kolayca eklemek için aşağıdaki kodları kullanabilirsiniz.

CREATE TABLE [dbo].[Notlar] (
  [AdSoyad] [varchar] (50) NOT NULL ,
  [Sinav1] [int] NULL ,
  [Sinav2] [int] NULL ,
  [Final] [int] NULL
) ON [PRIMARY]

Oluşturduğumuz bir Excel dosyasındaki tanımlanmış verileri ADO .NET aracılığıyla alarak kullanıcının görebileceği formda bir datagrid nesnesine yazdırdık. Daha sonra da yine bu verileri ADO .NET nesneleri aracılığıyla SQL Server’daki tablomuza yazdırdık. Anlatmaya çalıştığım konuda bu özelliği basit yönüyle inceledik. Buradaki örnek kodlardan yola çıkarak sizde uygulamalarınızda bir Excel dosyasındaki verileri alıp üzerinde işlemler yapabilir ve varolan başka bir veritabanı dosyasına yazdırabilirsiniz.

Başka bir makalede görüşmek üzere.

Uğur UMUTLUOĞLU
umutluoglu @ gmail.com