トルネード

毛利のメモ書き

SqlClient.SqlDataReaderをジェネリックスで判断

SqlClient.SqlDataReaderで型指定した条件を返す場合

private T GetSqlDataReader<T>(System.Data.SqlClient.SqlDataReader rd, int cnum)
{
    try
    {
        if (!rd.IsDBNull(cnum))
        {
            if (typeof(T) == typeof(string))
            {
                return (T)(object)rd.GetString(cnum);
            }
            else if (typeof(T) == typeof(int))
            {
                return (T)(object)rd.GetInt32(cnum);
            }
        }
        return (T)(object)null;
    }
    catch(Exception e1)
    {
        Console.WriteLine(e1.Message);
        return (T)(object)null;
    }
}

こういうのを作っておけば

int i = GetSqlDataReader<int>(rd, 1);
string s = GetSqlDataReader<string>(rd, 2);

他の条件も入れれるので、効率よく書けます。