Asp.Net Excel’den SqlServer’a SqlBulkCopy ile Veri Aktarımı

exceltosqlserver
Bir önceki uygulamamızda Asp.Net Excel’den DataTable’a ve Access’e Bilgi Aktarımı örneğin yapmıştık şimdi ise kullanılan veritabanı SqlServer olduğu zaman nasıl bir yol izleyeceğiz ona bakalım yapacağımız işlemler belli bir yere kadar aynı şekilde devam ediyor excel dosyası yüklendikten sonra bilgileri aktarmak için SqlBulkCopy sınıfını kullanacağız uygulamanın çalışan halini konu sonundan indirebilirsiniz…
Yine ilk olarak liste ve veritabanımızı oluşturalım
exceldensqlserver
Sayfa oluşturma kodlarımız

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
     <title>www.aspnetornekleri.com Excel'den Access'e</title>
</head>
<body>
      <form id="form1" runat="server">
<div>    
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="yukleaktar" runat="server" Text="Dosya Yükle & Aktar" onclick="yukleaktar_Click" 
        />
</div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</form>
</body>
</html>

Yükleme işlemi için kodlarımızı yazmadan önce sayfamıza

using System.IO;
using System.Data.OleDb;
using System.Data;
using System.Data.SqlClient;

eklemeyi unutmuyoruz, Dosya Yükle & Aktar butonumuz için gerekli kodlar

string baglanti = "";
            if (FileUpload1.HasFile)
            {
                string dosyaadi = Path.GetFileName(FileUpload1.PostedFile.FileName);
                string dosyauzanti = Path.GetExtension(FileUpload1.PostedFile.FileName);
                string dosyayeri = Server.MapPath("~/gecici/" + dosyaadi);
                FileUpload1.SaveAs(dosyayeri);
                //www.aspnetornekleri.com
                if (dosyauzanti == ".xls")
                {
                    baglanti = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dosyayeri + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                }
                else if (dosyauzanti == ".xlsx")
                {
                    baglanti = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dosyayeri + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
                }
                //www.aspnetornekleri.com
                OleDbConnection bag = new OleDbConnection(baglanti);
                OleDbCommand komut = new OleDbCommand();
                komut.CommandType = System.Data.CommandType.Text;
                komut.Connection = bag;
                OleDbDataAdapter dAdapter = new OleDbDataAdapter(komut);
                DataTable excelkayitlari = new DataTable();
                bag.Open();
                DataTable excelsayfasi = bag.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string excelsayfasininadi = excelsayfasi.Rows[0]["Table_Name"].ToString();
                komut.CommandText = "SELECT * FROM [" + excelsayfasininadi + "]";
                dAdapter.SelectCommand = komut;
                dAdapter.Fill(excelkayitlari);
                excelkayitlari.Columns[0].ColumnName = "adsoyad";
                excelkayitlari.Columns[1].ColumnName = "sinif";
                excelkayitlari.Columns[2].ColumnName = "numara";
                bag.Close();
                GridView1.DataSource = excelkayitlari;
                GridView1.DataBind();
//veritabanı,tablo ismi ve sunucunuzu kendinize göre düznelemeyi unutmayın.
                SqlConnection baglanti2 = new SqlConnection("server=localhost; initial catalog=aspnetornek; integrated security=true");
                SqlBulkCopy kopyalama = new SqlBulkCopy(baglanti2);
                //www.aspnetornekleri.com
                baglanti2.Open();
                kopyalama.ColumnMappings.Add("adsoyad", "adsoyad");
                kopyalama.ColumnMappings.Add("sinif", "sinif");
                kopyalama.ColumnMappings.Add("numara", "numara");
                kopyalama.DestinationTableName = "dbo.ogrenci";
                //www.aspnetornekleri.com
                kopyalama.WriteToServer(excelkayitlari);
                baglanti2.Close();       
                File.Delete(dosyayeri);
            }

Yine excel dosyamızı geçici klasörümüze yükledik daha sonra bilgileri datatable’a alarak gridview’de görüntüledik. DataTable içindeki bilgileri SqlBulkCopy sınıfı yardımıyla hızlı bir şekilde sqlserver’a aktararak çalışmamızı tamamlıyoruz.

Excel’den SqlServer’a SqlBulkCopy ile Veri Aktarımı Uygulamasını İndir!!!

exceltosqlserver

  • Ömer Gökçe

    çok teşekkürler işimi gördü :)

  • Borahan

    Burada exceldeki sütünlarla sqltablodaki sütunlar aynımı olmak zorunda. Excelde sütün isminden bağımsız bir şekilde ilk sheet alanını nasıl ekleyeceğiz