Asp.Net Excel’den SqlServer’a SqlBulkCopy ile Veri Aktarımı
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
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.
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
çok teşekkürler işimi gördü 🙂