SQL den Excel e Veri Aktarma

Geçenlerde elime 11.000 telefon numarası olan bir excel listesi verdiler. Bunların telefon numarası aynı olanlar teke düşürülüp 100'erli şekilde parçalanması gerekiyordu.

Sql'in gözünü seveyim. Excel'de iken ID kolonu ekledim. SQL'e import ettim. Tekrarlayan kayıtları sayıp teke düşüren TSQL komutu ile 8000 kayıt elde ettim. Bunları 100'erli olarak parçalamak en az 80 tane excel dosyası export etmek demek. Bunu nasıl otomatik hale gerireceğimi ararken farklı seçenekler buldum.
1. Seçenek; SQL sorgu ekranında sorgu yazmak. Ama Excel çıktısı için Office ve SQL aynı anda x86 ya da x64 olmalı. Bende Office x86, SQL x64 olunca bu çözüm sonuç vermedi.
2. Seçenek; Excel makro ekranında ActiveX Data Provider referansını ekleyip VB kodu eklemek.

//Microsoft ActiveX Data Provider referansını ekle
Sub DataAktar()
    ' Connection nesnesi oluşturalım.
    Dim cnPubs As ADODB.Connection
    Set cnPubs = New ADODB.Connection

    ' Bağlantı cümlesi değişkeni
    Dim strConn As String

    ' SQL Server OLE DB Provider sağlayıcısını kullanacağız
    strConn = "PROVIDER=SQLOLEDB;"

    ' Yerel sunucudaki Deneme veritabanına bağlanacağız.
    strConn = strConn & "DATA SOURCE=.\SQL;INITIAL CATALOG=Liste;"

    ' Windows Authentication güvenliğini tercih ediyoruz
    strConn = strConn & " INTEGRATED SECURITY=sspi;"

    ' Bağlantıyı açalım
    cnPubs.Open strConn

    ' Bir recordset nesnesi oluşturalım
    Dim rsPubs As ADODB.Recordset
    Set rsPubs = New ADODB.Recordset

    With rsPubs
        ' Mevcut bağlantı nesnesini tahsis edelim
        .ActiveConnection = cnPubs
        ' Sorgumuzu yazalım
        .Open "SELECT Adi,Soyadi,Cep FROM SMS Where ID>0 and ID<=100 Order by ID"
        ' Kayıtları Sheet1'teki A1 hücresinden itibaren yazdıralım
        Sayfa1.Range("A1").CopyFromRecordset rsPubs

        .Close
    End With

    cnPubs.Close
    Set rsPubs = Nothing
    Set cnPubs = Nothing

End Sub

3. Seçenek; Benim tercihim.
C# WindowsForm projesi açıp, Referans olarak Microsoft.Office 14.0 Object Library ve Microsoft.Office.Interop.Excel ekliyoruz.

 Projeye bir DataGrid atıyoruz ve LinqtoSQL bağlıyoruz.

Form ekranımız altta,
 
 
Buton 2'ye basınca DataGrid'e veri getiriyor.
Buton 1 veriyi Excel'e yolluyor.

Forma ait kaynak kodu altta;

using System;
using System.Linq;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()

        {
            InitializeComponent();
        }

        DataClasses1DataContext data = new DataClasses1DataContext();
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        Excel.Application xlsApplication;
        Excel.Workbook xlsWorkBook;
        Excel.Worksheet xlsWorkSheet;
       
        //Excele altarıp kaydeder.
        private void button1_Click(object sender, EventArgs e)
        {
                object missingValue = System.Reflection.Missing.Value; 
                xlsApplication = new Excel.Application();
                xlsApplication.Visible = true;
                xlsWorkBook = xlsApplication.Workbooks.Add(missingValue);
                xlsWorkSheet = (Excel.Worksheet)xlsWorkBook.Worksheets.get_Item(1);
                int i = 0;
                int j = 0;
                for (i = 0; i <= dataGridView1.RowCount - 1; i++)
                {
                    for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
                    {
                        DataGridViewCell cell = dataGridView1[j, i];
                        xlsWorkSheet.Cells[i + 1, j + 1] = cell.Value;
                    }
                }
                xlsWorkBook.SaveAs(@"C:\Users\BHDR\Desktop\neww\"+textBox3.Text+".xlsx", Excel.XlFileFormat.xlWorkbookDefault, missingValue, missingValue, missingValue, missingValue, Excel.XlSaveAsAccessMode.xlExclusive, missingValue, missingValue, missingValue, missingValue, missingValue);
                xlsWorkBook.Close(true, missingValue, missingValue);
                xlsApplication.Quit();
                MessageBox.Show("Excel dosyası oluşturuldu.");
        }
        //SQL den alıp DataGridde listeler.
        private void button2_Click(object sender, EventArgs e)
        {
            int a = Convert.ToInt32(textBox1.Text);
            int b = Convert.ToInt32(textBox2.Text);
            var sorgu = from p in data.SMs
                        where p.ID > a && p.ID <= b
                        orderby p.ID
                        select new
                        {
                            p.Adi,
                            p.Soyadi,
                            p.Cep
                        };
            dataGridView1.DataSource = sorgu.ToList();
        }
    }
}

Bu da Excel çıktısı .
Hepinize kolay gelsin.

Bu blogdaki popüler yayınlar

(Başarılı Kurulum) Lenovo Z510 Mac Os X El Capitan kurma

(Başarılı Kurulum) Lenovo E73 MacOS Sierra Kurulumu