in Eski Blog Yazılarım

C# DataRow Field Extension Method

Alper hoca’ya bugün veri katmanımızdan kendi class’ımıza verileri
aktarırken null kontrolünü generic yapan bir fonksiyonu nasıl yazarız
diye sordum. "Yine başımıza iş çıkartıyorsun" diye bana takılırken, başka
bir yerdende kodu hemen yazmaya girişti.
Olay burda Type olduğu için
C#’ın Generic Type Parameters‘lardan
yararlandık. Böylelikle geri dönüş değerini istediğimiz bir tip verip
metod içinde de null value kontrolü rahatlıkla yapar olduk.

Metodu yazarken Alper hoca’nın DataRow.Field<>
isminde bir extensions metod dikkatini çekti esasen bizim yazmak
istediğimiz metodun aynısıydı adamlar yazmış diyip Reflector ile
incelemeye başladık. İnceleyip biraz kopya çektiktan sonra DataRow’dan
gelen verinin null kontrolünü yapan bu seksi örneği çıkardık.

        public static T GetValue(DataRow dr, string field)
{
if (typeof(T).IsValueType)
{
if (dr[field] == DBNull.Value)
{
return default(T);
}
else
{
return (T)dr[field];
}
}

return (dr.IsNull(field)) ? default(T) : (T)dr[field];
}

Biraz daha detaylandırıp fazla uzatmaden kullanımını örneklersek:

            DataTable DataTablom = new DataTable();
DataTablom = VerileriYukle();

foreach (DataRow row in DataTablom.Rows)
{
int tablo_id = GetValue<int>(row,"id");
DateTime tablo_tarih = GetValue<DateTime>(row, "tarih");
bool durum = GetValue<bool>(row, "durum");
}

şeklinde metodu kullanabilirsiniz. Esasen .Net takımı bizim yerimize Field<> metodunu zaten yazmış. Bu metodu kullanmak bazı durumlarda tam emin olmamakla birlikte daha stabil bir kontrol sağlar düşüncesindeyim. Metodu kullanmak içn System.Data.DataSetExtensions.dll’ini projenize referans vermeniz gerekir. Reflector ile inceleyeceksenizde yine bu dll dosyasını disassembly etmeniz gerekir.

Field<> Extension’una örnek vermek gerekirse:

            DataTable DataTablom = new DataTable();
DataTablom = VerileriYukle();

foreach (DataRow row in DataTablom.Rows)
{
int tablo_id = row.Field<int>("id");
DateTime tablo_tarih = row.Field<DateTime>("tarih");
bool durum = row.Field<bool>("durum");
}

şeklinde kulllanımı var. Metodun mantığını kavradıktan sonra tabiki
DataRow.Field Extension Metodunu kullanıyorum. Ufak bir detay ama bu
kontrolleri yapmazsanız data access katmanındaki tutarsız veriler size
bug, sorun, bir sürü hata ekranı ve mutsuz kullanıcılar olarak geri
dönecektir…

Bu arada twitteramesaj.com olarak açtığımız ufak porjemizde bizi destekleyen bir sponsor bulduk. Bize sağlayacakları gms modem ile daha stabil ve hızlı bir alt yapımız olacak yoksa benim telefon’a kalsak 10 sms den sonra hararet yapıyor, kullanıcılar’da sms gönderdik yazmadı diye kızıyorlar :)

Yorum Bırak

Comment