C# C# Windows Form Örnekleri EXCEL Programlama

C# ile Excel Dosyasına Bağlanma (OleDbConnection ile)

Bu yazımızda OledbConnection kullanarak Excel dosyasına bağlanıp Select (Veri çekme), İnsert (Veri Ekleme), Update (Güncelleme) işlemlerini gerçekleştireceğiz ve Excel dosyasındaki verilerin Datagridview de görüntülenmesini sağlayacağız.

Ayrıca C# dilinde yazılmış daha fazla örnek ve konular için C# Dersleri yazısını yada sağ üstte bulunan site içinde arama panelini kullanabilirsiniz.

Örneğimizde D sürücüsünde bulunan ve Öğrenci listesi tutan “ogrenci.xlsx” isimli bir excel dosyasına bağlanıp bu işlemleri gerçekleştireceğiz. Excel dosyamızı aşağıdaki şekilde hazırlıyoruz.

Daha sonra formumuzu aşağıdaki şekilde tasarlayalım.

excel_datagrid

Kodlamaya başlayalım. İlk olarak bağlantı sağlayabilmek için;

ekliyoruz.

Daha sonra verileri Getir butonuna çift tıklayarak excel verilerimizin DataGridView üzerinde görünmesini sağlamak amacıyla aşağıdaki kodları yazıyoruz. OledbConnection bağlantı cümlesinde HDR= YES yaparak ilk satırın sütun başlığı olarak ayarlanmasını sağlıyoruz.

Ekle komutuna basınca Textbox’ lara girmiş olduğumuz değerlerin ilgili Excel sütunlarına kayıt işlemi için aşağıdaki kodları yazıyoruz.

Güncelleme işlemini TextBox1′ e girdiğimiz Öğrenci Numarasına göre yapalım. Örneğin 155 nolu Öğrencinin bilgilerini değiştirmek gibi. Bunun için Güncelle butonuna aşağıdaki kodları yazabiliriz.

Yukarıdaki örnekte bağlantıyı tekrar tekrar yazmak yerine Public olarak tanımlayabilirsiniz. İsterseniz veri seçme için bir metot oluşturarak Güncelleme ve Ekleme işlemlerinden sonra veya form açıldığında datagrid’ in güncellenmesini sağlayabilirsiniz.

Kodların bu şekilde düzenlenmiş hali ise aşağıdaki şekilde olacaktır.

Kaynak:

www.csharp-console-examples.com

54 Yorum

  • Merhabalar,
    ‘Ölçüt ifadesinde veri türü uyuşmazlığı.’
    Ben bu hatayı alıyorum kodu ilk yazdıgımda kayıt ekleme yapbiliyordum ama
    bi anda hata vermeye başladı herşeyi defalarca yaptım kacırdıgım bir nokta var ama cözemdim yardımcı olabilirseniz sevinirim gerçekten.Teşekkürler
    OleDbCommand komut = new OleDbCommand();
    baglan.Open();
    komut.Connection = baglan; //www.yazilimkodlama.com
    string sql = “Insert into [Sayfa1$] ([kitap],[yazar],[fiyat]) values(‘” + textBox1.Text + “‘,'” + textBox2.Text + “‘,'” + textBox3.Text + “‘)”;
    komut.CommandText = sql;
    komut.ExecuteNonQuery();
    baglan.Close();
    MessageBox.Show(“Kitap Sisteme Kaydetildi”);
    Veriler();

  • excelden operasyon adını çekebiliyorum lakin bir türlü aşağıdaki şartı sağlayamadım

    operasyon adı Giriş Kontrol ise en sondaki textboxa excelden çekip 1000 yazacak
    operasyon adı ön boyun kesilmesi ise seçildiyse en sondaki textboxa excelden çekip 2000 yazacak

    private void textBox13_TextChanged(object sender, EventArgs e)
    {
    textBox13.CharacterCasing = CharacterCasing.Upper;
    baglanti.Open();
    DataTable tbl = new DataTable();
    string cumle;
    cumle = “Select * from [Sayfa1$B1:B80] where Operasyon_Adi like ‘%” + textBox14.Text + “%'”;
    OleDbDataAdapter adptr = new OleDbDataAdapter(cumle, baglanti1);
    adptr.Fill(tbl);
    baglanti.Close();
    dataGridView4.DataSource = tbl;
    }
    kodalarım şu şekilde

  • s.a hocam 2 tane textboxum var birinin içerisine 0 girdiğimde diğerinin pasif, 1,2,3 girdiğimde aktif olmasını istiyorum lakin yapamadım

    private void textBox10_TextChanged(object sender, EventArgs e)
    {

    int a;
    a = Convert.ToInt32(textBox10.Text);

    if ( a == 0)
    {
    textBox14.Enabled = false;
    }

    else if (a != 0)
    {
    textBox14.Enabled = true;
    }
    }

  • c# da excelde sayfa1 verileri çekebiliyorum datagride lakin aynı datagridde sayfa2 yi de nasıl çekebilirim

    private void textBox9_KeyPress(object sender, KeyPressEventArgs e)
    {
    OleDbConnection baglanti;

    baglanti = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\BILAL CUREK\Desktop\C# Proje son hali\YENİ PROJE\WindowsFormsApplication2\bin\Debug\Input_Planlama\Planlama.xlsx; Extended Properties=’Excel 12.0 xml;HDR=YES;'”);
    baglanti.Open();
    OleDbCommand sorgu = new OleDbCommand(“select * from [Sayfa1$] where Parti_Kodu like ‘” + textBox9.Text + “%’or Estas_Kodu like ‘” + textBox9.Text + “%'”, baglanti);
    OleDbDataAdapter adtr = new OleDbDataAdapter(“select * from [Sayfa1$] where Parti_Kodu like ‘” + textBox9.Text + “%’or Estas_Kodu like ‘” + textBox9.Text + “%'”, baglanti);

    OleDbDataReader dr;
    dr = sorgu.ExecuteReader();

    while (dr.Read())
    {
    if (dr[0].ToString() == textBox9.Text || dr[1].ToString() == textBox9.Text)
    {
    textBox1.Text = dr[0].ToString();
    textBox2.Text = dr[1].ToString();
    textBox3.Text = dr[2].ToString();
    textBox4.Text = dr[3].ToString();
    textBox5.Text = dr[4].ToString();
    textBox6.Text = dr[5].ToString();
    textBox7.Text = dr[6].ToString();
    textBox8.Text = dr[7].ToString();
    DataTable tablo2 = new DataTable();
    adtr.Fill(tablo2);
    dataGridView2.DataSource = tablo2;
    }
    }
    baglanti.Close();
    dr.Close();
    }

  • c# da excelde sayfa1 verileri çekebiliyorum datagride lakin aynı datagridde sayfa2 yi de nasıl çekebilirim

  • leDbConnection bag = new OleDbConnection(“Provider=Microsoft.JET.OleDb.4.0;Data Source=” + Application.StartupPath + “\\sinav.mdb”);
    OleDbCommand cmd;
    int id;
    public Form1()
    {
    InitializeComponent();
    }

    private void btnEkle_Click(object sender, EventArgs e)
    {
    string ad, soyad;
    ad = txtAd.Text.Trim().ToLower();
    soyad = txtSoyad.Text.Trim().ToLower();
    bag.Open();
    cmd = new OleDbCommand(“insert into ogrenci(ad,soyad) values(‘” + ad + “‘,'” + soyad + “‘)”, bag);
    int i = cmd.ExecuteNonQuery();
    if (i == 1) MessageBox.Show(“Kayıt işlemi Başarılıdır”);
    else MessageBox.Show(“Kayır İşlemi Başarısız”);
    bag.Close();
    txtAd.Clear();
    txtSoyad.Clear();
    }

    private void btnListele_Click(object sender, EventArgs e)
    {
    dataGridView1.Rows.Clear();
    bag.Open();
    cmd = new OleDbCommand(“select * from ogrenci”, bag);
    OleDbDataReader dr = cmd.ExecuteReader();
    string[] satir = new string[3];
    while (dr.Read()) {
    satir[0] = dr[0].ToString().ToUpper();
    satir[1] = dr[1].ToString().ToUpper();
    satir[2] = dr[2].ToString().ToUpper();
    dataGridView1.Rows.Add(satir);
    }
    bag.Close();
    }

    private void btnSil_Click(object sender, EventArgs e)
    {
    bag.Open();
    cmd = new OleDbCommand(“delete from ogrenci where ID=” + id, bag);
    int i = cmd.ExecuteNonQuery();
    if (i == 1) MessageBox.Show(“Silme işlemi Başarılıdır”);
    else MessageBox.Show(“Silme İşlemi Başarısız”);
    bag.Close();
    btnListele_Click(sender, e);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    btnSil.Enabled = false;
    btnGuncelle.Enabled = false;
    }

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
    id = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value);
    btnGuncelle.Enabled = true;
    btnSil.Enabled = true;
    txtAd.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    txtSoyad.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
    }

    private void btnGuncelle_Click(object sender, EventArgs e)
    {
    string ad, soyad;
    ad = txtAd.Text.Trim().ToLower();
    soyad = txtSoyad.Text.Trim().ToLower();
    bag.Open();
    cmd = new OleDbCommand(“update ogrenci set ad='” + ad + “‘,soyad ='” + soyad + “‘ where ID=”+id, bag);
    int i = cmd.ExecuteNonQuery();
    if (i == 1) MessageBox.Show(“Güncelleme işlemi Başarılıdır”);
    else MessageBox.Show(“Güncelleme İşlemi Başarısız”);
    bag.Close();
    txtAd.Clear();
    txtSoyad.Clear();
    btnListele_Click(sender, e);

  • Hocam excell deki verileri aktarırken sadece iki saat dilimi arasındaki verileri aktarmak istiyorum.
    “SELECT * FROM [Sheet$] WHERE [Kayit] BETWEEN ‘27.01.2019 07:30:00’ AND ‘23.01.2019 20:00:00’ “, bag);

  • Merhaba kodum aşağıdaki gibi ve aldığım hata da şu : Toplama işlevinin parçası olarak belirtilen ‘CLIENT_ID’ ifadesini içermeyen bir sorgu yürütmeyi denediniz. Sizce nerede hata yapıyorum? Yardımcı olursanız sevinirim.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.OleDb;
    using System.Data;

    namespace ConsoleApp1
    {

    class Program
    {
    static void Main(string[] args)
    {
    OleDbConnection xlsxbaglanti = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\exhibitA-input.xlsx; Extended Properties=’Excel 12.0 Xml;HDR=YES'”);
    xlsxbaglanti.Open();
    OleDbCommand komut = new OleDbCommand();
    komut.Connection = xlsxbaglanti;
    string sql = “SELECT COUNT(CLIENT_ID) AS CLIENT_COUNT, DISTINCT_PLAY_COUNT FROM( SELECT COUNT(SONG_ID) AS DISTINCT_PLAY_COUNT, CLIENT_ID FROM(SELECT CLIENT_ID, SONG_ID FROM [YeniSayfa$] WHERE PLAY_TS = ‘10.08.2016’ GROUP BY SONG_ID) GROUP BY CLIENT_ID) GROUP BY DISTINCT_PLAY_COUNT”;
    komut.CommandText = sql;
    komut.ExecuteNonQuery();
    OleDbDataReader oku = komut.ExecuteReader();

    while (oku.Read())
    {
    string client_count = oku[“CLIENT_COUNT”].ToString();
    string distinc_play_count=oku[“DISTINCT_PLAY_COUNT”].ToString();
    Console.WriteLine(“client count:”+ client_count + “distinct play count :” + distinc_play_count+ Environment.NewLine);
    }
    xlsxbaglanti.Close();
    Console.ReadLine();
    }
    }
    }

  • Merhaba
    Excelden datagridviewe veri çekme işlemini biraz faarklı olarak başarı ile yaptım sıkıntı yok dosya yolu sabit yerine openfile dialog ile seçip listeleyebiliyorum ama benim şöyle bir sorunum var kullanacağım excel dosyasını internetten indiriyorum ve her indirdiğimde sayfa ismi farklı geliyor.Sayfa ismini değişekene atamak istiyorum.Bunun yolu varmıdır?Nedir? TEŞEKKÜRLER.

    Kullandığım Kod :
    OpenFileDialog ofd = new OpenFileDialog();
    {
    ofd.Filter = “xlsx |*.xlsx| xls|*.xls”;
    ofd.Title = “Excel Dosyası Seçiniz..”;
    ofd.RestoreDirectory = true;
    };
    if (ofd.ShowDialog() == DialogResult.OK)
    {
    string DosyaYolu = ofd.FileName;// dosya yolu

    OleDbConnection baglanti = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + DosyaYolu + “; Extended Properties=’Excel 12.0 xml;HDR=YES;'”);
    baglanti.Open();
    OleDbDataAdapter da = new OleDbDataAdapter(“SELECT * FROM [Siparişler_07092018$C:E]”, baglanti);
    DataTable DTexcel = new DataTable();
    da.Fill(DTexcel);
    DataTable datasource = DTexcel;
    dataGridView1.DataSource = DTexcel;
    baglanti.Close();
    }

    • Excel.Application ExcelObj = new Excel.Application();

      Excel.Workbook theWorkbook = null;

      string strPath=”dosya yolu yazılacak”;

      theWorkbook = ExcelObj.Workbooks.Open(strPath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

      Excel.Sheets sheets = theWorkbook.Worksheets;

      Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//Get the reference of second worksheet

      string sayfaAdi= worksheet.Name;//Çalışma sayfasının adını alıyor.

  • c#2010 kullanıyorum excell 2013 yüklü

    referanslardan office 15.0 object yüklüyorum fakat datagrite görün bir türlü gelmiyor.

    =Microsoft.ACE.OLEDB.12.0 bu kısmıda 15.0 olarakta denedim sonuç yok

    yardımcı olabilir misiniz

  • birleştirilmiş satırlar var ise aktarma da sıkıntı oluyor bunu nasıl çözeriz hocam.
    örneğin

    no kişibilgileri
    ad soyad
    1 A B

    Yukarıdaki gibiyse excel şablonumuz soyad kısmını forma aktarmıyor

  • Programı c# yazdığımda veri ekleme işlemi gerçekleştirebiliyorum ama datagrid de herhangi bir değişiklik olmuyor. Arka planda excele veri ekliyor fakat datagridde herhangi bir değişiklik olMuyor ???? Bunun için ne yapmamız gerekiyor

  • Programı c# yazdığımda veri ekleme işlemi gerçekleştirebiliyorum ama datagrid de herhangi bir değişiklik olmuyor. Arkada planda excele veri ekliyor fakat datagridde herhangi bir değişiklik oluyor ???? Bunun için ne yapmamız gerekiyor

  • Merhaba
    Ben excele ekleme işlemi yaparken aşağıdaki hatayı alıyorum. Yardımcı olabilir misiniz?

    komut.ExecuteNonQuery();
    komutu uzerinde asagidaki hatayi aliyorum
    An unhandled exception of type ‘System.Data.OleDb.OleDbException’ occurred in System.Data.dll

    Additional information: Syntax error in INSERT INTO statement.

  • Teşekkür ederim. Gösterim ve ekleme gayet iyi çalıştı. Fakat güncelleştirmeyi çalıştıramadım. Problem nerde acaba?

    • Büyük ihtimalle sorgunuzda problem vardır. Mesaj olarak ne gösteriyor görmem gerek​iyor.

  • herkesin temel şikayeti bağlantı hatası nasıl çözecez? neden olur.
    OleDbConnection baglanti = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\veritabani.xlsx; Extended Properties=’Excel 12.0 xml;HDR=YES;'”);

  • Merhabalar
    An unhandled exception of type ‘System.InvalidOperationException’ occurred in System.Data.dll

    Additional information: ‘Microsoft.ACE.OLEDB.12.0’ sağlayıcısı yerel makine kayıtlı değil.
    bende bu şekilde bir hata alıyorum yardımcı olurmusunuz

  • Merhaba,

    Excele yazılan değerler Metin olarak gözüküyor ben sayı olarak gözükmesini istiyorum.Ve örneğin Numara yerine 25 yazdığımda önüne ‘ işareti koyuyor.Bu konuda yardımcı olurmusunz

  • Microsoft Access veritabanı altyapısı ‘Sayfa2’ nesnesini bulamadı. Nesnenin varolduğundan ve adını ve yolunun adını doğru yazdığınızdan emin olun. ‘Sayfa2’ yerel nesne değilse, ağ bağlantınızı denetleyin veya sunucu yöneticisine başvurun. ŞÖYLE BİR HATA ALIYORUM.
    SIKINTI NEDİR ACABA?

    • Excel dosyasinda sayfa2 nin adini degistirmis olabilirmisiniz? Kontrol ederek tekrar deneyin. Su an gormeden birşey diyemiyorum.

      • kontrol ettim ogrenci excel sayfa hiç bir farkı yok.

        private void button2_Click(object sender, EventArgs e)
        {
        OleDbConnection baglanti = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\ogrenci.xlsx; Extended Properties=’Excel 12.0 xml;HDR=YES;'”);
        baglanti.Open();
        OleDbDataAdapter da = new OleDbDataAdapter(“SELECT * FROM [Sayfa2]”, baglanti);
        System.Data.DataTable dt = new System.Data.DataTable();
        da.Fill(dt);
        dtgrdvCihazBilgileri.DataSource = dt.DefaultView;
        baglanti.Close();

        }
        kodu bu şekilde yazdım. excell dosyamıda ogrenci diye oluşturdum D nin içine attım Sayfa2 diye kayıtlı sayfam var ama o hatayı alıyorum bağlantıda bir hata mı yapıyorum çözemedim.

  • C# programlamada Visual studio da yazıyorum. Excel dosyasındaki veriyi dosyayı seçerek sistemime yüklüyorum.Dosyasındaki sütunların birinde fatura sıra no diye bir alan var.Fatura sıra no en az 13 haneden oluşuyor örneğin 2016000000123 yada daha uzun olabiliyor. Bunu excel dosyasındaki ilgili hücreye yazınca bu şekilde değil örneğin 2,0000+E0000 vb. şekilde oluyor. Böyle bir veriyi hürce biçimlendirmesi yapmadan hatasız olarak nasıl yükleyebiliriz, kod lazım, hücrenin içini alsın.

  • baglanti.Open(); kısmında bağlantı hatası alan arkadaşlar eğer x64 bir işletim sistemiyle çalışıyorlarsa; proje ayarlarından sırasıya Properties->Build->Platform target kısmından x86 ‘yı seçsinler.

  • merhaba linkteki hatayı alıyorum

    http://hizliresim.com/883vDV

    ve ben bu provider kısmını anlamadım neye göre onları yazıyoruz bende excel 2003 versiyonu var başka bir provider mı yazmalıyım.

    sizin yazdıklarını yazdım olmadı ben ne yazmalıyım.

  • Merhaba hocam;
    datagrid de seçili olan satırı silmeyi nasıl yapabiliriz? excel ile bağlıyorum diğer komutlar çalışıyor ama silme bulamadım.

  • Sizin kodu aynen kopyalayıp c sharp a yapıştırdım. Form u da aynen sizin gibi düzenledim.

    Bağlantı açmada hata veriyor.

    • Merhaba. Bağlanmak istediğiniz excel dosyasının yeri ve ismini kontrol edermisiniz. Bağlantı cümlesindekine uygun olması gerekiyor.

      • (@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Kitap1.xlsx; Extended Properties=’Excel 12.0 xml;HDR=YES;'”);

        masaüstüme Kitap1 diye bir excel oluşturdum. Yukarıdaki kodu yazdım.
        Bağlantı aç ta hata verdi.

        • Bağlantı cümlenizde dosya masaüstünde olarak görünmüyor. C: içerisinde görünüyor. masaüstünde oluşturduğunuz Kitap1 dosyasını C: dizinine kopyalarsanız sorun düzelecektir diye düşünüyorum.

  • Merhaba ,
    DEvamlı oledbexception was unhandlad hatası alıyorum.
    baglanti.open(); kısmında veriyor bu hatayı
    yardımcı olurmusunuz?

  • Merhabalar,
    Excelde yaptığımız text değişiklikleri datagridview de gözükebiliyor. Peki excelde yaptığımız hücre renklendirmeleri, yazıyı kalınlaştırma gibi biçimlendirmeler de datagridviewde gözükebilir mi?

krall için bir yanıt yazın X

Web Tasarım & Programlama sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya devam et