.Net Denemeleri

Visual Studio 2010 JavaScript Intellisense Sorunu

Visual Studio 2008 arayüzü ile JavaScript kodlaması yaparken kod tamamlamalarındaIntellisense boşlukspace tuşuna alışık bir yazılımcıysanız Visual Studio 2010 sinirlerinizi çok bozabilir. Sadece Enter ve Tab tuşlarını dikkate alıyor.

Çözüm;
Tools -> Options -> Text Editor -> JScript -> Miscellaneous altında Only use Tab or Enter to commit seçeneğini kaldırmanız yeterli olacaktır.

vs2010

11 Eylül Cumartesi, 2010 | Genel Visual Studio

SqlBulkCopy İle Veri Kopyalama

Excel yada benzeri bir kaynaktan elde ettiğimiz yaklaşık bir milyon kayıt içeren bir DataTable olduğunu düşünelim. Bu kayıtları veritabanında ki x bir tabloya nasıl eklerizinsert?

Tek tek Insert yapmak mı? Bildiğin intihar olur.
DataAdapter ile UpdateGüncelleme yapmak mı? İnanılmaz zahmetli ve gereksiz.(Çalışacağından emin bile değilim)

Biri Bulk Insert mü dedi, işte aradığımız cevap.
Bulk Insert, yüklü miktarda ki verileri herhangi bir tablotableya performanslı bir şekilde eklemek için veri katmanında kullanabileceğimiz bir komuttur. Ado.Net teknolojisi SqlBulkCopy (kısaca sbc diyelim) nesnesi ile bu komutu kolaylıkla kullanmamıza olanak verir.
Tabi kullanımı bu kadar kısıtlamamak gerekir. Sbc ile iki farklı sunucu yada aynı sunucu içinde iki farklı tablo da kopyalanabilir.

Bir örnek ile açıklayalım;
Excel dosyasındaki verileri DataTable nesnesine dolduracağız. Peşinde sbc ile DataTable içindeki verileri örnek bir tabloya ekleyeceğiz.

Örnek Excel dosyası
Excel

Hedef tablo
Table

Excel dosyasındaki alanlar ile tablo alanfieldlarını bilerek farklı isimlendirdim. Sbc nesnesinin bir özelliği de bu gibi durumlarda alanları adresleyebilmesidirmapping.

//Excel -> DataTable
string SourceConnStr =
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\data.xls;Extended 
 Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";
DataTable SourceDT = null;
using (OleDbConnection SourceConn = new OleDbConnection(SourceConnStr))
{
    using (OleDbDataAdapter SourceDAP = new OleDbDataAdapter(
        "select * from [Contact]", SourceConn))
    {
        SourceDT = new DataTable("Contact");
        SourceDAP.Fill(SourceDT);
    }
}
 
//DataTable -> Sql
using (SqlConnection DestinationConn = new SqlConnection(
    "Data Source=.;Initial Catalog=Ordek;Integrated Security=True"))
{
    DestinationConn.Open();
    using (SqlBulkCopy SBC = new SqlBulkCopy(DestinationConn))
    {
        //Verilerin kopyalanacağı Tablo Adı
        SBC.DestinationTableName = "Kisiler";
        //Kaynak ile hedef alanlarının adları farklı ise
        //alanları adreslemek gerekir
        SBC.ColumnMappings.Add("ContactID", "ID");
        SBC.ColumnMappings.Add("FirstName", "Ad");
        SBC.ColumnMappings.Add("LastName", "Soyad");
        SBC.ColumnMappings.Add("EmailAddress", "Email");
        SBC.ColumnMappings.Add("Phone", "Telefon");
        //son olarak WriteToServer metotu ile kaynak hedefe kopyalanır
        SBC.WriteToServer(SourceDT);
        //DataTable dışında DataRow koleksiyonu yada DataReader nesnesi de
        //parametre olarak verilebilir.
    }
}

Örnek proje.

10 Eylül Cuma, 2010 | Ado.Net Sql

Visual Studio Klavye Kısayolu

Herhangi bir text (cs,sql gibi) ortamında çalışırken Ctrl+U klavye kısayolunu ile seçili tüm karakterleri küçük harfe çevirebilirsiniz.

Güncelleme: Ctrl + Sfth + U ile de büyük harfe çevirebilirsiniz.

3 Eylül Cuma, 2010 | Genel Visual Studio

Powershell ile Guid Değer Üretme

Guid değer elde etmenin bir çok yolu mevcut. Powershell kullanarak elde etmekte bunlardan bir tanesi.

 Guid

2 Eylül Perşembe, 2010 | Powershell

Metot Geri Dönüşleri Üzerine

Metotlar geriye değer döndürür yada döndürmez. Peki döndürenler kaç değer döndürür denildiğinde tabi ki bir deriz. Birden fazlaya ihtiyaç varsa ne yaparız?
Bunun için 3 metot prototipi yazdım, paylaşıyorum.

class Program
{
    static void Main(string[] args)
    {
        //1. yöntemin kullanımı
        int a, b;
        a = Yontem1(out b);
        // sonuc
        //a -> 20 ve b -> 10 olur.
    }
 
    //1. yöntem -> out kullanımı
    static int Yontem1(out int par)
    {
        par = 10;
        return 20;
    }

 İlk yöntem out parametre anahtarını kullanmak. Geriye dönmediği kesin ama metottan etkilendiğide bir gerçek. İşe yarıyor mu, evet :)

class Program
{
    static void Main(string[] args)
    {
        //2. yöntemin kullanımı
        DonenTip tip = Yontem2();
        //sonuc
        //tip.a -> 20 ve tip.b -> 10 olur.
    }
 
    //2. yöntem -> sınıf(class) kullanmak
    class DonenTip
    {
        public int a, b;
    }
 
    static DonenTip Yontem2()
    {
        DonenTip tip = new DonenTip();
        tip.a = 20;
        tip.b = 10;
        return tip;
    }

İkinci yöntem ise Classnesne (Custom Reference Type) kullanmak. Geriye yine tek bir nesne dönüyor. İçsel olarak genişletilebilmesi (property, field) sayesinde çok kullanışlı lakin yazması zahmetli.

class Program
{
    static void Main(string[] args)
    {
        //3. yöntemin kullanımı
        var sonuc = Yontem3();
        //sonuc.Item1 -> 20 ve sonuc.Item2 -> 10 olur.
    }
 
    //3. yöntem Tuples kullanımı
    static Tuple<int, int> Yontem3()
    {
        return Tuple.Create(20, 10);
    }

Son yöntem aslında yazının amacı ve Framework 4.0 yeniliği olan Tupleçok-ögeli kullanmak...

Örnek proje.

23 Haziran Çarşamba, 2010 | C#