SqlBulkCopy Class kullanımı

SqlBulkCopy sınıfı, iki veritabanı arasında veya aynı veritabanı içindeki, iki tablo arasında kopyalama yapmak için kullanılan çok basit bir sınıftır. Bu sınıf ile 500.000 adet veriyi 1 dakika içerisinde kopyalayabilmektesiniz. Bu açıdan oldukça kullanışlıdır. Şimdi bir örnekte bunu inceleyelim.

İlk olarak bir Windows form açalım. Ve bir adet buton ekleyelim. Butonun click olayına şağıdaki kodları yazalım.

private void button1_Click(object sender, EventArgs e)

{

SqlConnection baglanti1 = new SqlConnection("server=localhost; initial catalog=Ticari; integrated security=true");

//ilk olarak kopyalayacağımız veritabanı için bağlantı oluşturduk.

SqlCommand komut = new SqlCommand("select * from stok", baglanti1);

baglanti1.Open();

SqlDataReader oku = komut.ExecuteReader();

DataTable dt = new DataTable();

dt.Load(oku);

oku.Close();

baglanti1.Close();

// veritabanını okuyup, bir datatable'a aktardık ve bağlantıyı kapattık.

SqlConnection baglanti2=new SqlConnection("server=localhost; initial catalog=kopyaTicari; integrated security=true");

// şimdi de hedef veritabanı için bir bağlantı oluşturduk.

// Not: Eğer kopyalayacağınız tablolar aynı veritabanı içindeyse tek bir bağlantı yeterlidir. ben farklı veritabanları arasında kopyalama yaptığım için iki farklı bağlantı oluşturdum.

SqlBulkCopy kopyalama = new SqlBulkCopy(baglanti2);

// SqlBulkCopy sınıfından bir adet nesne türettik. Dikkat ettiyseniz bağlantı olarak hedef veritabanının bağlantısını verdik.

baglanti2.Open();

kopyalama.ColumnMappings.Add("id", "id");

kopyalama.ColumnMappings.Add("Malzeme", "Malzeme");

kopyalama.ColumnMappings.Add("Adet", "Adet");

// bu üç satırda kaynak tablodaki sutunların, hedef tablodaki hangi sütunlara kopyalanacağını belirttik.

kopyalama.DestinationTableName = "dbo.kopyastok";

// hedef tablonun ismini belirttik.

kopyalama.WriteToServer(dt);

// kopyalamaya başladık.

baglanti2.Close();

}

Burda kodları tekrar açıklamayacağım zaten yanlarında hepsini açıkladım. Eklemek istediğim bir şey var. Ben burada tablonun tamamını kopyaladım. Eğer isteseydim sadece bir ya da iki sütunu da koyalayabilirdim. Bunu, sütunları eşleştirdiğimiz kod satırlarında sağlarız. Mesela aşağıdaki gibi olsaydı sadece id ve Malzeme sütunlarını kopyalamış olacaktık.

kopyalama.ColumnMappings.Add("id", "id");

kopyalama.ColumnMappings.Add("Malzeme", "Malzeme");

Son olarak şunu belirteyim, hedef veritabanını ve tabloyu daha önce kendimiz oluşturduk. Bunu istersek bir kodla da yapabiliriz ama o kısmı burada değil başka bir yazımda ele alacağım. Şimdilik bu kadar yeter 😉

Leave a Reply

Your email address will not be published. Required fields are marked *