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#

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#

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen