C# SqlBulkCopy Kullanımı

csharp
Merhaba bu yazımızda C# ile SqlClient.SqlBulkCopy Sınıfının nasıl çalıştığını göreceğiz.

Büyük sayıdaki verileri hızlı bir şekilde transfer etmek için en ideal yol hiç kuşkusuz ki Bulk Copy yöntemidir. Bu yöntem ile txt dosyalar, Excel dosyaları kullanılabileceği gibi C# ile de yapılabilmektedir.
Not: Kaynak tablo ile hedef tablonun sutun sayıları ve tipleri aynı olmalıdır.

Not: Bulk Copy için Northwind veritabanını kullanacağımız için Northwindin SQL serverınıza yüklü olması gerekmektedir.

Öncelikle aşağıdakine benzer bir form oluşturuyoruz.

SqlBulkCopy01

BulkCopy için bir veri kaynağına ihtiyacımız olacak. Bunun için bir DataTable oluşturuyoruz.

using System.Data;
DataTable _dt = new DataTable("Query");

Bu DataTable‘ı doldurmak için ise SQL connection oluşturuyoruz.

using System.Data.SqlClient;
        private SqlConnectionStringBuilder conStrBuilder = new SqlConnectionStringBuilder()
        {
            DataSource = "localhost",//Server Adresi
            InitialCatalog = "Northwind",//Database Adı
            UserID = "SA",//Kullanıcı Adı
            Password = "",//Kullanıcı Parolası
        };
        private SqlConnection SourceConnection;

Bağlantımızda tamam şimdi DataTable‘ı doldurabiliriz.

            SourceConnection = new SqlConnection(conStrBuilder.ConnectionString);
            SourceConnection.Open();

            SqlCommand cmd = new SqlCommand("SELECT * FROM Products", SourceConnection);

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            //yada da = new SqlDataAdapter("SELECT * FROM Products", SourceConnection);

            da.Fill(_dt);
            //DataGridView'de görüntülemek istersek alttaki iki satırı da ekleyebiliriz.
            MainDataGridView.DataSource = _dt;
            MainDataGridView.Update();

            SourceConnection.Close();

Şuana kadar yaptığımız işlemler neticesinde elimizde dolu bir DataTable Bulunmakta

SqlBulkCopy02

Şimdi asıl konumuza dönelim.

BulkCopy için ilk olarak hedef tablomuzun olması gerekiyor.

Hedef tablo için ben örnek bir tablo hazırladım.

USE [Northwind]
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ProductsCopy]') AND type = (N'U'))
DROP TABLE [dbo].[ProductsCopy]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ProductsCopy](
	[ProductID] [int] IDENTITY(1,1) NOT NULL,
	[ProductName] [nvarchar](40) NOT NULL,
	[SupplierID] [int] NULL,
	[CategoryID] [int] NULL,
	[QuantityPerUnit] [nvarchar](20) NULL,
	[UnitPrice] [money] NULL,
	[UnitsInStock] [smallint] NULL,
	[UnitsOnOrder] [smallint] NULL,
	[ReorderLevel] [smallint] NULL,
	[Discontinued] [bit] NOT NULL)
GO

Aktarım için ise bu kodları kullanıyoruz.

        private SqlConnection SourceConnection;
            DestinationConnection = new SqlConnection(conStrBuilder.ConnectionString);
            DestinationConnection.Open();

            //Hedef Tabloyu boşaltıyoruz.
            SqlCommand cmd = new SqlCommand("DELETE FROM ProductsCopy", DestinationConnection);
            cmd.ExecuteNonQuery();

            //SqlBulkCopy nesnemizi tanımlayıp bağlantımızı atıyoruz.
            SqlBulkCopy bulkCopy = new SqlBulkCopy(DestinationConnection);
            //Hedef tablomuzu belirtiyoruz.
            bulkCopy.DestinationTableName = "ProductsCopy";

            //ve son olarak WriteToServer komutu ile DataTable'ı MSSQL Server'a yazdırıyoruz ve bağlantıyı kesiyoruz.
            bulkCopy.WriteToServer(_dt);

            bulkCopy.Close();
            DestinationConnection.Close();

Hepsi Bu kadar.
Örnek Projeyi buradanindirebilirsiniz.

  • Bünyamin Kanatlı

    hocam iyi çalışmalar..çok güzel anlatmışsınız.Benim hazırladığım projede uygulama hatalarım var..Eleştiri ve önerileriniz benim için önemli.Bana nasıl yardımcı olabilirsiniz

    • Merhaba Bünyamin öncelikle yorumun için teşekkürler.
      Projen hakkında biraz daha bilgi verebilirsen yardımcı olmaya çalışırım. İstersen sayfanın en altında bulunan mail adresine mail de atabilirsin.

  • Evren Demir

    Merhaba proje indirilemiyor tekrar yükleyebilir misiniz? teşekkürler

    • Linki güncelledim indirebilirsin.