none
SqlBulkCopy ile Excel'e veri aktarmak RRS feed

  • Soru

  • Normalde Excel'deki veriyi Sql'e atabiliyorum fakat Sql'den Excel'e atma kısmında bir fikir yürütemiyorum.

    Normal Excel Sayfasını Oluşturdum devamını getiremedim.

     Excel.Application ExcelNesnesi = new Excel.Application();
                if (ExcelNesnesi == null)
                {
                    MessageBox.Show("Bilgisayarınızda Excel Yüklü olmaya bilir. Veya Sürüm Yetersiz Olabilir.");
                }
                Excel.Workbook CalismaKitabi;
    
                CalismaKitabi = ExcelNesnesi.Workbooks.Add(true);
                ExcelNesnesi.Visible = true;   //Bu eklentiyi açarsak
                Excel.Worksheet tablo;
                tablo = (Excel.Worksheet)CalismaKitabi.Worksheets.get_Item(1);
    
                DataTable dt = new DataTable();
    
                using (Sqlbaglanti)
                {
                     SqlCommand komut = new SqlCommand("select * from Product", Sqlbaglanti);
                    if (Sqlbaglanti.State == ConnectionState.Closed) Sqlbaglanti.Open();
                     SqlDataReader rd = komut.ExecuteReader();
    
                }

    21 Ağustos 2013 Çarşamba 10:26

Yanıtlar

  • void Main()
    {
      Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();
      var workbook = xl.Workbooks.Add();
      xl.Visible = true;
      
      Worksheet sht = ((Worksheet)workbook.ActiveSheet);
      Range target = (Range)sht.Range[ "A1" ];
      
      string strCon = @"OLEDB;Provider=SQLNCLI11.0;server=.\SQLExpress;Trusted_Connection=yes;Database=Northwind";
      
      string strSQL = "select * from Customers";
      
      sht.QueryTables.Add( strCon, target, strSQL ).Refresh();
     
    }

    Not: SQL server ornek databaselerinden Northwind ve tablosu Customers kullaniliyor. Calismasi icin Microsoft.Office.Interop.Excel.dll ekle (Visual Studio Tools for Office indirmediysen indir).

    Not: epplus denen zimbirtinin sadece ana sayfasini okudum, xml/xsl formatiyla calisiyor ve 50,000 hucreyi saniyeler icinde aktariyormus. Bu soyledigi dogruysa inanilmaz yavas, herhalde baski hatasi. Bir ara incelerim belki. Bence Excel'den SQL server'a SqlBulkCopy, SQL server'dan Excel'e ise QueryTables.Add veya CopyFromRecordSet en etkili yontemler.

    Bu linke yazmami istedigin notu sonradan farkettim.

    • Yanıt Olarak Öneren Ali Rıza İnceoğlu 23 Ağustos 2013 Cuma 06:04
    • Yanıt Olarak İşaretleyen Bjk'Lee 23 Ağustos 2013 Cuma 07:13
    22 Ağustos 2013 Perşembe 15:33

Tüm Yanıtlar

  • for (int j = 0; j < dataGridView1.Columns.Count; j++)
    
    {
    
    Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[StartRow, StartCol + j];
    
    myRange.Value2 = dataGridView1.Columns[j].HeaderText;
    
    }
    
    StartRow++;
    
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    
    {
    
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    
    { //Daha fazla bilgi için : www.gorselprogramlama.com
    
    try
    
    {
    
    Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[StartRow + i, StartCol + j];
    
    myRange.Value2 = dataGridView1[j, i].Value == null ? "" : dataGridView1[j, i].Value;
    
    }
    21 Ağustos 2013 Çarşamba 10:54
  • Yanıtın için teşekkür ederim ama ben bunu SqlBulkCopy 'ile yapmak istiyorum

    21 Ağustos 2013 Çarşamba 11:19
  • Fazla uğraşma, adamın biri uğraşıp sorunu gidermiş ahanda: http://epplus.codeplex.com/
    21 Ağustos 2013 Çarşamba 13:21
  • Nasıl kullanılıyor bu dll'i alıp projeye ekliyorsun daha sonra? Datayı nasıl veriyorsun

    21 Ağustos 2013 Çarşamba 14:12
  • void Main()
    {
      Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();
      var workbook = xl.Workbooks.Add();
      xl.Visible = true;
      
      Worksheet sht = ((Worksheet)workbook.ActiveSheet);
      Range target = (Range)sht.Range[ "A1" ];
      
      string strCon = @"OLEDB;Provider=SQLNCLI11.0;server=.\SQLExpress;Trusted_Connection=yes;Database=Northwind";
      
      string strSQL = "select * from Customers";
      
      sht.QueryTables.Add( strCon, target, strSQL ).Refresh();
     
    }

    Not: SQL server ornek databaselerinden Northwind ve tablosu Customers kullaniliyor. Calismasi icin Microsoft.Office.Interop.Excel.dll ekle (Visual Studio Tools for Office indirmediysen indir).

    Not: epplus denen zimbirtinin sadece ana sayfasini okudum, xml/xsl formatiyla calisiyor ve 50,000 hucreyi saniyeler icinde aktariyormus. Bu soyledigi dogruysa inanilmaz yavas, herhalde baski hatasi. Bir ara incelerim belki. Bence Excel'den SQL server'a SqlBulkCopy, SQL server'dan Excel'e ise QueryTables.Add veya CopyFromRecordSet en etkili yontemler.

    Bu linke yazmami istedigin notu sonradan farkettim.

    • Yanıt Olarak Öneren Ali Rıza İnceoğlu 23 Ağustos 2013 Cuma 06:04
    • Yanıt Olarak İşaretleyen Bjk'Lee 23 Ağustos 2013 Cuma 07:13
    22 Ağustos 2013 Perşembe 15:33
  • Çok teşekkür ederim üstad Eline sağlık hemen uygulamaya geçicem
    23 Ağustos 2013 Cuma 07:14