代码改变世界

使用Extension Methods来使IDataReader更加方便

2009-08-25 22:09  Jun1st  阅读(2165)  评论(20编辑  收藏

今天在逛老赵的Blog的时候,看到了他的常用辅助方法收集一文,想到了自己之前看到的并应用在项目中的一个方法,响应老赵的号召,拿出来晒晒。

 

在使用DataReader读取数据时,通常会遇到数据可能为Null, 但是又需要转换为如int等其它类型的数据,因此就通常会写这样的代码:

int count = reader["count"] == null ? 0 : int.Parse(reader["count"] + string.Empty);

而且这样的代码通常会大段大段出现在很多地方。

对于比较懒惰的程序员来说,这样的RY(repeat yourself)是一件很痛苦的事情,因此是时候来想个更好的方法了。这里首先想到的就是Extension Method。

SafeRead代码

public static T SafeRead<T>(this IDataReader reader, string fieldName, T defaultValue)
{
    try
    {
        int ordinal = reader.GetOrdinal(fieldName);
        if (reader.IsDBNull(ordinal))//if column "fieldName" doesn't exist, will throw an exception
            return defaultValue;

        return (T)Convert.ChangeType(reader[ordinal], defaultValue.GetType());
    }
    catch(InvalidCastException)
    {
        return defaultValue;
    }
}

很简单的几句代码,有了这个方法之后,在使用DataReader时,就可以通过SafeRead来读取数据了

int count2 = reader.SafeRead<int>("count", 0);

 

简单但是实用的代码,希望对大家在项目中有所帮助。

最后附上老赵的常用辅助方法收集