16 Eylül 2016 Cuma

Entity Framework Kayıt ekleme işleminde hızlandırma

Merhaba arkadaşlar, zaman zaman çok fazla kayıt ile işlemler yapmanız gerekebilir. Bu datalar üzerinde işlem yapmak yada kopyalayıp başka bir veri tabanına yazmanız gerekebilir. Bu gibi durumlarda standart insert işlemi çok uzun süreler beklemeniz gerekiyor yani işlemler çok zaman alıyor. Bunun sebebi siz entity.object.Add dediğinizde default olarak enetity framework birtakım kontrollerden geçiriyor ve bu da yüksek sayıda kayıt olduğunda çok fazla zaman alıyor. Neyse uzatmadan kodları ekleyim.

Context.Configuration.AutoDetectChangesEnabled = false;
Context.Configuration.ValidateOnSaveEnabled = false;

14 Eylül 2014 Pazar

C# webconfig de değişken tanımlama

merhaba arkadaşlar bu yazımda webconfig içinde değişken tanımlamaya değinicem. Bu olay ne işime yarıyacak dersenizde benim için yada benim kullanma nedenlerimden biriyle sizlere örnekliycem.
Şöyle bir kısa senaryomuz olsun…
Bir eticaret yazıyorsunuz ve ürün marka ve slider için resimleriniz var. Bence veri tabanında tam ismini yazmak yerine sadece dosya adını yazmak daha mantıklı. Bu yüzden resmi çağırmak istediğimde her defasında tüm yolu yazmak yerine webconfig’de değişkenler tanımlıycam. Daha sonra kullanmak istediğimde de bu değişkenlere veri tabanından gelen resim isimlerini ekleyip direk olarak projemde kullanıcam.
Şimdi gelelim nasıl birşey olduğuna
webconfig içinde configuration – appSettings içine key ekliyoruz kod olarak örneği ise aşağıda var

<configuration>
   <appSettings>
        <add key=”MarkaResim” value=”/Uploads/MarkaResim/” />
        <add key=”UrunResim” value=”/Uploads/UrunResim/” />
        <add key=”SliderResim” value=”/Uploads/SliderResim/” />
  </appSettings>
</configuration>

Yukarıdaki örnek webconfig içine nasıl yazılacağı ile ilgili key ve value içerisindeki isim ve dosya yolunda benim yaptığım örnekte benzerlik var illa ki sizinkiler de benzer olucak diye bir kısıtlama yok.
Şimdi sırada bunları nasıl alıp kullanıcağımız var
var markaResimYolu = ConfigurationManager.AppSettings["MarkaResim"];
Yukarıdaki örnekte direk olarak markaResimYolu değişkenine /Uploads/MarkaResim/değerini atadık.Bir örnek daha verecek olursam.
var markaResimYolu = string.Format(“{0}{1},ConfigurationManager.AppSettings["MarkaResim"],resimAdi”);
bu örnekte de string format kullanarak birleştirdim. Bu tarz işlemler geliştirilebilir mesela bir detaylandırılabilir ve sonunda çok işinize yarıycak ve devamlı kullanabileceğiniz kodlar ortaya çıkabilir. Hepsi hayal gücünüze bağlı :). Makaleyi okuduğunuz için teşekkürler.İşinize yarıyacağına inanıyorum.

4 Eylül 2014 Perşembe

Messagebox İçerisinde Alt Satıra Geçmek

Merhaba arkadaşlar kısa ve öz yazıcam zaten pek uzun da bir konu değil :)

Messagebox içerisinde alt satıra geçmek isteyebileceğiniz durumlar olabiliyor yada messagebox olmasa bile string içerisinde de bu gibi durumlara ihtiyacınız olabilir. Bu durum için string değeriniz içine \n koymanız yeterli olucaktır.

var stringdeger = "İZMİR \n İSTANBUL \n ANKARA";

örnekteki gibi kullanımı basit ve bazı durumlarda işinize yarayabilir.

İyi çalışmalar.

22 Eylül 2013 Pazar

C# da Resim Doğrulama Kodunu Atlatmak

Merhaba arkadaşlar bu yazımda bast resim doğrulama kodlarını nasıl çözüceğimizi ve atlatıcağımızı anlatıcam. Öncelikle şu anda atlatılabilecek tarzda olan kod örneği vermek istiyorum.
Resimde gördüğünüz kod basit denecek bir resim ve renklerin çözümlenmesi çok kolay.
İşlemlere başlamadan önce de OCR kavramına biraz bakmak da önemli.Buradaki linkten http://office.microsoft.com/tr-tr/help/HP003081255.aspx nasıl bir şey olduğu ile ilgili kafanızda birşeyler belirebilir.

Resim doğrulama kodu için ben 3 aşamalı bir uygulama geliştirdim ve bunlar
  1. C# Webbrowser nesnesi ile resmi download etmek.
  2. Resmi yeniden renklendirmek
  3. OCR ile resim üzerinden okuma işlemini yapmak
Şimdi adımları açılayarak neden gerekli ve nasıl işlediğini görücez arkadaşlar.

1.C# Webbrowser nesnesi ile resmi download etmek.

Bu işlemi resim üzerinde oynama yapabilmek için yapıyoruz webbrowserda açılan sayfadaki resim doğrulama kodunu (captchayı) indirme işlemi ile başlıyoruz.

public void GetCaptcha(string URL)
        {
            IHTMLDocument2 wbDocument = (IHTMLDocument2)Browser4A4B.Document.DomDocument;
            IHTMLControlRange imageRange = (IHTMLControlRange)((HTMLBody)wbDocument.body).createControlRange();

            foreach (IHTMLImgElement img in wbDocument.images)
            {
                imageRange.add((IHTMLControlElement)img);

                imageRange.execCommand("Copy", false, null);

                using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                {
                    bmp.Save(string.Format("{0}\\guvenlikResmi.bmp", Application.StartupPath));
                }
            }
        }

Yukarıdaki örnek kod bize resmi getiriyor ve programın çalıştığı dizine resmi kaydediyor. İlk adımımızı böyle sonlandırıyoruz.

2.Resmi yeniden renklendirmek

Bu bölümde daha önceden resmi siyah beyaz yapma işlemi ile ilgili makalemdeki kodlardan faydalandım aslında.tek fark birazcık değişiklik yaptım üzerinde.

private string GunvenlikKoduDuzenle(string resimYolu)
        {
            try
            {
                bmp = new Bitmap(resimYolu);
                for (int y = 0; y < bmp.Height; y++)
                {
                    for (int x = 0; x < bmp.Width; x++)
                    {
                        Color eski = bmp.GetPixel(x, y);
                        int ortalama = (eski.R + eski.G + eski.B) / 3;
                        Color yeni = eski;

                        if (ortalama <= 50)
                            yeni = Color.White;
                        else
                            yeni = eski;
                        bmp.SetPixel(x, y, yeni);
                    }

                    for (int x = 0; x < bmp.Width; x++)
                    {
                        Color eski = bmp.GetPixel(x, y);
                        int ortalama = (eski.R + eski.G + eski.B) / 3;
                        Color yeni = Color.White;
                        if (ortalama != 255)
                            yeni = Color.Black;
                        bmp.SetPixel(x, y, yeni);
                    }
                }
                pictureBox2.Image = bmp;
                bmp.Save(resimYolu.Replace(".bmp", string.Empty) + "Temiz.bmp");
                return resimYolu.Replace(".bmp", string.Empty) + "Temiz.bmp";
            }
            catch
            {
                return string.Empty;
            }
        }

Bu bölümde dikkat etmemiz gereken 2 bölüm var.1. bölüm ilk for döngüsü için geçerli bu bölümde pixel pixel tarama var ve pixelin RGB değerini alıp ortalamasını buluyor.Bu ortalama ile de pixelin siyaha yakın olma durumunu anlıyoruz ve siyah renkteki arka planı beyaz yapıyoruz.2. bölümü ise geri kalan yazı kısmını birden fazla renk olduğu için tek renk siyaha çevirme işlemi. Bu işlemleri yapma amacımsa OCR için daha net ve basit bir resim oluşturmak. Çünkü bu yöntemi  kullansam da OCR ile %100 çevirme işlemi olamayabiliyor.

3.OCR ile resim üzerinden okuma işlemini yapmak

        MODI.Document modiDocument;
        private string GuvenlikResmiIceriginiAl(string dosyaYolu)
        {
            try
            {               
                modiDocument.Create dosyaYolu);
                modiDocument.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
                foreach (MODI.Image insImage in modiDocument.Images)
                {
                    MODI.Layout insLayout = insImage.Layout;
                    return insLayout.Text;
                }
                modiDocument.Close(false);
                return string.Empty;
            }
            catch (Exception ex)
            {
                SystemStatics.HataYakala(ex);
                return string.Empty;
            }
        }

Son bölümde ise oluşturduğum resmi Office içinde olan OCR yi kullanarak. Çıkan sonucu return ederek alıyorum. Burdaki unutulmaması gereken bir husus da MODI referansını projeye eklemek.


Bu yöntem ile bu tarzdaki resimleri %75 oranında çözümleyebiliyorum. Umarım sizin de işinize yarar. Okuduğunuz için teşekkürler.




17 Temmuz 2013 Çarşamba

C# Entity Framework Stored Procedure Kullanılamaması.

Merhaba arkadaşlar bu yazımda karşılaştığım ve bana gereksiz yere zaman harcatan bir hatadan bahsedicem. Aslında tam olarak da hata diyemiceğim bir durum bu ...  EF ile çalışırken bazen  (her eklediğimde karşılaşmadım.) store proc ekleme işlemii yaptığımda intellisense da SP mi göremiyor ve onu kullanmıyorum.Bunun çeşitli nedenleri olabilir ama benim sorunumda Model Browser'dan baktığımda SP nin Comlex Type ı eklenmiş ve Function Import Bölümünde Fuctionunun eklenmiş olduğu halde SP mi kullanamıyordum.Bunu aşmak için ve çalışmaya devam etmek için Solition Explorerdan Modelinize gelin ve Model.Context.tt ve Model.tt üzerine ayrı ayrı sağ tıklayarak run costom tool seçeneğini seçin.Bunu yaptıktan sonra spnizi sorunsuz olarak kullanmaya devam edebilirsiniz.
Not: Benim Örneğimde Nortwind kullanıdığı için oradaki isimler NorthwindModel.Contenxt.tt ve NorthwindModel.tt dir.
Yardımcı olduysa iyi :)

20 Mayıs 2013 Pazartesi

C# Duplicate initialization of member Hatası

Merhaba arkadaşlar. Çalışmanızda bu hatayı bir objenizn propertysine değer ataması işlemi yapıyorsanız görebilirsiniz bunun nedeni zaten objenin o properysine değer atamış olmanızdır.Örnek olarak ;

var kisi = new kisiObje
{
      ID = 1,
      Yas = 18,
      Ad = "Ali",
      Soyad = "Cankan",
      Yas = 21
};

Bu atama işeleminde 2. Yas ataması bölümünde hata olduğunu visual studio bize bildiricek yapmamız gereken atamalarımı kontrol etmek.

14 Mayıs 2013 Salı

Asp.net Garip Url

Merhaba arkadaşlar çalıştığınız bir asp.net sayfası üzerinde webconfig ayarlarında session ayarları yaptığınız zaman karşınıza bu tarz bir url çıkabilir.

http://localhost:35735/(S(gj33dkv0arq3snrxavpze3vs))/sayfam


Örnek vericek olursam;

<sessionState
     mode="InProc"
     cookieless="true"
     timeout="30"/>

Bu url tipinden kurtulmak ve eski haline çevirmek için. Buradaki  cookieless="true" kısmını kaldırmak yeterli olucaktır