İstanbul için iftar vakti

by Suat TUNCER 24. August 2009 09:17

 

İstanbul Bayrampaşa viyadüğü ve yolda parmakla sayılacak kadar az araç var. istanbulda böyle bir manzara görmek yılda bir kaç defa nasip olur. bu zamanlardan en şaşmazı da iftar vakti olsa gerek. Saat 19:55 iftara 5 dakika kala İstanbul'da trafikten eser yoktur ve Şişli-Bağcılar arası sadece 10 dakika sürmüştür.

 

 

Herkese hayırlı iftarlar :-).

 

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

General

Generic IsDBNull Function

by Suat TUNCER 11. August 2009 16:42

Geçenlerde bir öğrencimden mail aldım, mailde bir konudan yakınıyordu, diyordu ki;

"Merhaba Hocam,

Küçük bir projeye başladım ve bu projede ORM araçlarını kullanmak yerine ADO.Net ile yazmak istedim fakat DataReader ile veri okurken verinin null olup olmadığını kontrol etmekten uygun tiplere dönüştürmekten sıkıldım bu işin pratik bir yolu var mıdır?"


.Net ile heleki C# ile uygulama geliştiriyorsanız, mutlaka her şeyin bir pratik yolu vardır, şöyleki;

static bir sınıf içerisine aşağıdaki gibi bir methodu ekleyin.

        public T ReadField<T>(OracleDataReader reader, string columnName) {
            object value = reader[columnName];
            Type targetType = typeof(T);
            if (Convert.IsDBNull(value)) {
                if (targetType == typeof(string))
                    return (T)Convert.ChangeType(String.Empty, typeof(string));
                return default(T);
            }
            else {
                targetType = Nullable.GetUnderlyingType(targetType);
                if (targetType == null)
                    targetType = typeof(T);
                return (T)Convert.ChangeType(value, targetType);
            }
        }



çağırırken ise, aşağıdaki gibi kullanmak yetecektir.


            OracleConnection connection = new OracleConnection("ConnectionString");
            OracleCommand command = connection.CreateCommand();
            command.CommandText = "SELECT * FROM SourceTable";
            command.Connection.Open();
            OracleDataReader reader = command.ExecuteReader();
            IList<Product> list = new List<Product>();
            Product item = null;
            while (reader.Read()) {
                item = new Products();
                item.ID = ReadField<int>(reader, "ID");
                item.Quantity = ReadField<string>(reader, "Quantity");
                item.UnitPrice = ReadField<decimal>(reader, "UnitPrice");
                item.Description = ReadField<string>(reader, "Description");
            }
            command.Connection.Close();



NOT : beklenmeyen tip dönüşümlerinde kodun çatlamasını istemiyorsanız try catch kullanabilirsiniz.

Edit : Method Nullable tiplerle de çalışacak şekilde güncellendi.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

C#

Oracle'da Silinen Tabloyu Geri Getirmek

by Suat TUNCER 31. July 2009 12:24

Bir veritabanı nesnesini yanlışlıkla sildiğinizi düşünün, bunun farkına fardığınız ilk beş saniye ağzınız açık gözleriniz irice açılmış bir şekilde ekrana bakakalırsınız. Ardından geçen iki saniye de okkalı bir ha...tir çekersiniz acı bir nidayla. Ardından içerdiği dataları düşünür, müşteriyi düşünür sonrada oluk oluk terlemeye başlarsınız. Ama bu durum Oracle'da başınıza geldiyse bu kadar sıkıntı yapmaya gerek yok, oldukça kolay bir şekilde geri alabilirsiniz. Silinen nesneler DBA_RECYCLEBIN ve USER_RECYCLEBIN tablolarında tutular, burayı sorgulayarak korkularımızla yüzleşiriz.

SELECT OBJECT_NAME, ORIGINAL_NAME FROM USER_RECYCLEBIN sorgusunu çalıştırdığınızda ORIGINAL_NAME sütününde sildiğiniz nesnenin adını görüyorsanız rahat bir nefes alın artık :).

Nesnenizin yanında bulunan OBJECT_NAME değerini aşağıdaki gibi sorulayıp datalarınızı görebilirsiniz.

SELECT * FROM "BIN$b/yFhnhEQCzgQ6wWAQtALA==$0"

tablonuzu geri almak için FLASHBACK TABLE [tablo_adi] TO BEFORE DROP sorgusunu çalıştırdığınızda tablonuz ve datalarınız geri gelecektir.

 

Hadi geçmiş olsun.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Database

WPF and CAS (Code Access Security)

by Suat TUNCER 2. April 2009 08:34

Merhaba,

Uzun zaman önceydi .Net Framework ilk sunulduğunda yaygın güvenlik senaryolarından farklı olarak CAS (Code Access Security) adında bir güvenlik modeli ile karşılaşmıştık ve o zaman pek de önemsenmemişti. Daha sonra .Net Framework 2.0 ile biraz daha önemine değinilmiş fakat geliştiriciler yine de kullanmayı pek tercih etmemiş tercih edenlerde kısıtlı bir grup olarak kalmıştı. Şimdi 2009 yılındayız ve CAS, WPF ile Browser uygulamaları geliştiriken iyice farkediliyor artık. Düşünün ki bir browser application içerisinde, standart bir Windows Form instance'ı aldığınız anda bile StackWalk'lar ardı ardına tetikleniyor ve özel bir ayrıcalık verilmediyse doğrudan securtiy exception fırlatılıyor.  Microsoft, "kendim yazdım kendime" tadında bir deyişle SilverLight ve WPF için geliştirdiği Security SandBox'ı önemli ölçüde CAS ile modellemiş durumda. Bu haliyle bakınca olabildiğine CAS'lı bir WPF application duruyor karşımızda.

CAS'in bir diğer güzelliği de WPF veya herhangi bir .Net uygulamasında kendinize özel Security SandBox'lar geliştirebilmenizi sağlamasıdır. CAS detayları için için buraya bakabilirsiniz.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Security

Dependency Property

by Suat TUNCER 28. March 2009 11:26

Merhabalar,

Son zamanlarda "Dependency Property" çok fazla kullanmaya başladım ve bu zamana kadar kullanmadığım için kızdım kendime. Özellikle WPF ile birlikte bir nesnenin hemen hemen bütün özellikleri "Dependency Property" olarak tanımlandığı için ve bazı özel noktalarda eventlara ihtiyaç duyduğumuzda imdadımıza yetişmektedirler. Aşağıya basit bir kod örneği ekliyeyim de tam olsun.

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        DependencyPropertyDescriptor dc; // bizim için bağlamayı çekecek olan nesne ;-)
        dc = DependencyPropertyDescriptor.FromProperty(
            Button.IsMouseOverProperty, // durumuna bağlanmak istediğimiz özellik
            typeof(Button));            // bağlama çekilecek tip

        dc.AddValueChanged(             // nesne ve method ilişkilendiriliyor
            button1,                    // IsMouseOver özelliği kullanılacak nesne
            Button_MouseOver);          // IsMouseOver özelliği değiştiğine çalışacak method
    }


    void Button_MouseOver(object sender, EventArgs e)
    {
        /*
           method tetiklendiğinde eğer;
           IsMouseOver true ise arkaplan kırmızı yapılıyor
           IsMouseOver false ise arkaplan sarı yapılıyor.
        */

        Button senderButton = sender as Button;
        if (senderButton.IsMouseOver)
            senderButton.Background = Brushes.Red;
        else
            senderButton.Background = Brushes.Yellow;
        // böylece galatasaray selam gönderilmiş oluyor :-)
    }

istenirse foreach döngüsü kullanılarak, bir control collectionın tamamına da uygulanabilir.

i love .net

 

Currently rated 2.0 by 2 people

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

C#

AÖF 2008 Vize Soruları

by Suat TUNCER 23. March 2009 15:13

Merhabalar

Daha öncede belirtmiştimdir belki. Anadolu üniversitesinin e-öğrenme portalını oldukça başarılı bulurum. Malum 6 senedir AÖF'de okuyunca bolca kullanımış oluyor insan. Bu sene artık son sınıfdayım ve bitirmeye niyetliyim. Bu yüzden fırsat buldukça çözmek için sınav sorularını indirmiştim. Belki başkasınında işine yarar diye linkleri veriyorum. Sorular PDF formatındadır. Açmak için sisteminizde Adobe Acrobat yüklü olmalıdır ama benim tercihim Foxit PDF Reader'dan yanadır.
 


Not : Yazdırmadan önce bir kez daha düşünün illa yazıdaracaksanız da bir A4 sayfasına önlü-arkalı olmak üzere 4 sayfayı sığdıra da bilirsiniz yada kafaniza göre taklın Wink.

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

General

Yeni Blog

by Suat TUNCER 15. March 2009 00:20

Merhabalar,

Uzun zamandır http://suattuncer.blogcu.com adresinde yazmıyordum, bunun sebebi biraz da blogu taşımak isteyişimdi. Gelin görün ki blogcu.com yönetiminden istememe rağmen bana ait dataların bir yedeğini alamadığım için henüz buraya aktaramadım. Burayı daha fazla boş bırakmak istemediğimden ilk postumuda atmış olayım dedim. Eski adresimi ziyaret edenler oranın şu anda harap bir halde olduğunu göreceklerdir, CSS ile oynayıp dataları uygun bir şekilde almak için o hale getirdim :-). ilk fırsatta 2005'den buyana tüm yazılarımı yorumlarıyla birlikte buraya taşıyacağım.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

General

Bayramlar yaşardık...

by Suat TUNCER 15. December 2008 08:14
Bayramlar yaşardık hep birlikte,
en büyüğümüzden en küçüğümüze bir arada.
Bir bayram daha yaşadık
                      ama en büyüğümüz bizden uzakta
                                                     hem de çok uzakta.
"Dade"miz,
kendi dilimizde annemiz,
masmavi gözleriyle, son bir gülümseyerek ayrıldı aramızdan.

Mekanın cennet olsun güzel ninem.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

General

Neden Herşey Sıfırdan Başlar

by Suat TUNCER 30. May 2007 12:00

Hiç düşündünüz mü, neden dizilerde indexler sıfırdan başlar ?

Aslında oldukça basit; int tipinde 5 elemanlı bir dizinin elemanlarını dolaşmak için genellikle aşağıdaki kod kullanılır

int main(){ 
     int rakamlar[5]; 
     for(int i=0;i<5;i++){
          // birşeyler yap   
     } 
     return 0;
}

 

Yukarıdaki dizinin herhangi bir elemanına erişmek demek, aslında dizinin o elemanının RAM'deki adresine erişmek demekdir şöyleki ;
     int rakamlar[5];  //int tipi bellekte 4 Byte yer tutar
RAM'de bu diznin yerleşimini şöyle olacaktır 

1. Eleman [0] 80100 data
80101 data
80102 data
80103 data
2. Eleman [1] 80104 data
80105 data
80106 data
80107 data
3. Eleman [2] 80108 data
80109 data
80110 data
80111 data
4.Eleman [3] 80112 data
80113 data
80114 data
80115 data
5.Eleman [4] 80116 data
80117 data
80118 data
80119 data

rakamlar  dizisi için örnek RAM yerleşimi.

 

Dizinin 4. Elemanına erişmek için 3 nolu index kullanılır, buda bizi 3 nolu elemanın RAM'de saklandığı bloğun başlangıç adresine erişmek edemektir. Hemen hesaplayalım.


dizinin başlangıç adresi + (dizi tipinin adres büyüklüğü * erişilmek istenilen indeks)

yani :
80100 + (4*3) = 80112 > yani 4. elemanın (3 indeks numaralı elemanın) başlangıç adresi

 

şimdi 0'dan başlamadığını düşünüp hesaplayın, hiç bir zaman ilk elemana erişilemezdi :-).

 

 

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

LLP

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen