Orhan AKDOĞAN > Visual C# .NET

C# – Excel To DataTable

Excel dosyasında bir çalışma kitabını veya çalışma kitabının herhangi bir hücre aralığını okuyup datatable olarak
döndürmek isterseniz aşağıdaki methodu kullanabilirsiniz.

– Method 2003-2007 dosya formatlarında çalışabilmektedir.
– Çalışma Sayfası parametresi gönderilmeyebilir, bu durumda method, dosyanın ilk çalışma sayfasını okuyacaktır.
– Hücre aralığı belirtilmez ise varsayılan olarak A1:Z65536 değerini alacaktır.

    
    private DataTable ExceltoDataTable(string ExcelDosyaYolu, string CalismaSayfasi = "", string Range = "A1:Z65536")
    {
        try
        {
            string con = "";
            if (ExcelDosyaYolu.Substring(ExcelDosyaYolu.Length - 1, 1).ToUpper() == "X")
            { con = @"Provider=Microsoft.ACE.OLEDB.12.0;"
              + "Data Source=" + ExcelDosyaYolu + ";"
              + "Extended Properties='Excel 8.0;HDR=No'";
            }
            else
            { con = "Provider=Microsoft.Jet.OLEDB.4.0;"
              + "Data Source=" + ExcelDosyaYolu + ";"
              + "Extended Properties='Excel 8.0;HDR=Yes'";
            }
            OleDbConnection xlscon = new OleDbConnection(con);
            xlscon.Open();
            //
            if (CalismaSayfasi == "")             {CalismaSayfasi = xlscon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
            }
            else {CalismaSayfasi = CalismaSayfasi + "$";}
            //
            OleDbCommand xlscmd = new OleDbCommand(@"SELECT * FROM [" + CalismaSayfasi +Range+"]", xlscon);
            OleDbDataAdapter xlsda = new OleDbDataAdapter();
            xlsda.SelectCommand = xlscmd;
            DataTable xlsdt = new DataTable();
            xlsda.Fill(xlsdt);
            xlscon.Close();
            xlsda = null;
            return xlsdt;
        }
        catch         {
            return null;
        }
        finally
        { }
    }  

Direk bir gride bağlamak isterseniz;
aspxgridview için,
grid.AutoGenerateColumns = true;
grid.Columns.Clear();
grid.DataSource = ExceltoDataTable(“C:\\Book1.xls”);
grid.DataBind();

C# – Sorgu değişkenlerinde tek tırnak sorunu

Sorguları  içlere değişkenler ekleyerek dinamik yapabiliyoruz,
bunlar hem güvenlik zafiyeti doğuruyor hemde özel karakterlerin sorun çıkarmasına sebep oluyor,
mesela bir firma adı içinde geçen tek tırnak database e yazılırken sorun çıkaracaktır,
çünkü tek tırnak zaten sql için rezerve edilmiş bir karakterdir.
Sorguların içinde dinamik textleri sorgu parametreleri ile atamak en doğrusu ve en güvenlisidir, 
şimdi bu doğru ve güvenli yönteme değinmeyip, hataya açık yöntemimizi biraz daha iyi hale getirelim.

 sorguları illede aralara textler ekleyerek oluşturcaz dersek sorgu metnini aşağıdaki methotlardan geçirerek
tırnak sorununu aşabiliriz.

//Tek tırnak yerine iki adet tek tırnak; tabloda yine tek tırnak olacaktır.
public string tirnakayiklayontem1(string sqltext)
        {
            sonuc = sonuc.Replace(sqltext, "'", "''")
            return sonuc;
        }
// Tek tırnak (ascii 39) yerine benzer tırnak karakteri(ascii 63)
public string tirnakayiklayontem2(string sqltext)
        {
            sonuc = sonuc.Replace(sqltext, "'", "’")
            return sonuc;
        }

Yukarıdaki her iki yöntemde de tablomuza tek tırnak istediğimiz şekilde yazılacaktır.

veya şu mantıkda birşey de yapılabilir, oracle için:
her  ”  ‘  ” karakteri için yerine aşağıdaki değerler basılmalıdır.
Tek tırnak arada bir karakter ise
|| Chr(39) ||

Tek tırnak ilk karakter ise
 Chr(39) ||

Tek tırnak son karakter ise
|| Chr(39)

Sadece tek tırnak replace etmekle güvenli hale getirilemez tabiiki,
aşağıdaki makaleyi okumanızı tavsiye ediyorum.

SQL Injection Ataklarından Nasıl Korunuruz?

.

C# – Printer Listesi

Printer Listesini Combobox’a doldurmak:

using System.Drawing.Printing;

foreach (string strPrinter in PrinterSettings.InstalledPrinters)
{
PrinterCombo.Items.Add (strPrinter);
}

C# Ondalık Basamak formatı

Virgülden sonra her durumda 2 basamak olsun istiyorsak, bunu formatta her basamak için “0” ekleyerek sağlıyoruz, ondalık hane sayısının fazla olduğu durumda yuvarlama yapılır, az olduğunda ise sıfır ile tamamlanmış olur.
Sonuç olarak aşağıda yer alan tüm örneklerden de anlaşılacağı gibi “0” kullanımı kadar basamak, “#” ise en fazla kullanım kadar basamak anlamını taşıyor.

Virgülden Sonra İki basamak

// sabit iki ondalık basamak
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

Noktadan sonra en fazla iki basamak

// max. iki ondalık basamak
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

Noktadan önce en az iki basamaklı

// ondalık noktadan önce en az iki basamaklı
String.Format("{0:00.0}", 123.4567);      // "123.5"
String.Format("{0:00.0}", 23.4567);       // "23.5"
String.Format("{0:00.0}", 3.4567);        // "03.5"
String.Format("{0:00.0}", -3.4567);       // "-03.5"

Önce ve Sonra, En Az ve En fazla 1 basamak

//önce ve sonra en az bir basamak.
String.Format("{0:0.0}", 0.0);            // "0.0"
//virgülden önce en az 1, virgülden sonra en fazla bir basamak.
String.Format("{0:0.#}", 0.0);            // "0"
//virgülden önce en fazla 1, virgülden sonra en az bir basamak.
String.Format("{0:#.0}", 0.0);            // ".0"
//önce ve sonra en fazla sıfır basamak
String.Format("{0:#.#}", 0.0);            // ""

Bindelik ayraç

// Bindelik ayraç
String.Format("{0:0,0.0}", 12345.67);     // "12,345.7"
String.Format("{0:0,0}", 12345.67);       // "12,346"

Sayıları Boşluklar ile Hizalama
Aşağıda gördüğünüz 10 sayısına boşluklar kullanarak tamamlanır,+10 sağa, -10 ise sola dayanacağını ifade eder

//Sayıları Boşluklar ile Hizalama
String.Format("{0,10:0.0}", 123.4567);    // "     123.5"
String.Format("{0,-10:0.0}", 123.4567);   // "123.5     "
String.Format("{0,10:0.0}", -123.4567);   // "    -123.5"
String.Format("{0,-10:0.0}", -123.4567);  // "-123.5    "

Eksi ve sıfırı belirtme

String.Format("{0:0.00;eksi 0.00; sıfır}", 123.4567);   // "123.46"
String.Format("{0:0.00;eksi 0.00; sıfır}", -123.4567);  // "eksi 123.46"
String.Format("{0:0.00;eksi 0.00; sıfır}", 0.0);        // "sıfır"

Farklı bir Format

String.Format("{0:Numara: 0.0}", 12.3);    // "Numara: 12.3"
String.Format("{0:0xx.yy0}", 12.4);          // "12xx.yy4"

DevExpress – XtraGrid / GridView de seçili satırları DataTable olarak döndürmek

gridView1.GetSelectedRows() ile seçili olan satırların Row Handles larını alabiliyoruz ama
aşağıdaki teknik ile bazı durumlarda işimiz daha kolay olacaktır.

       private DataTable xtraGridSelectToDatatable(DevExpress.XtraGrid.Views.Grid.GridView view)
        {
            DataTable final = new DataTable();
            if(view.DataSource is DataView)
            {
                DataTable sourcetable = ((DataView)view.DataSource).Table;
                final = sourcetable.Clone();
                foreach(int rowHandle in view.GetSelectedRows())
                {
                    DataRowrow = view.GetDataRow(rowHandle);
                    final.Rows.Add(row.ItemArray);
                }
                final.AcceptChanges();
            }
            return final;
        }