<#+
private string GetGenericDBType(DatabaseType type)
{
    switch(type)
    {
        case DatabaseType.Binary:
            return "DbType.Binary";
        case DatabaseType.Blob:
            return "DbType.Object";
        case DatabaseType.Boolean:
            return "DbType.Boolean";
        case DatabaseType.Byte:
            return "DbType.Byte";
        case DatabaseType.Char:
            return "DbType.String";
        case DatabaseType.Currency:
            return "DbType.Currency";
        case DatabaseType.Date:
            return "DbType.DateTime";
        case DatabaseType.Decimal:
            return "DbType.Decimal";
        case DatabaseType.Float:
            return "DbType.Decimal";
        case DatabaseType.Int64:
            return "DbType.Int64";
        case DatabaseType.Int32:
            return "DbType.Int32";
        case DatabaseType.Int16:
            return "DbType.Int16";
        case DatabaseType.NChar:
            return "DbType.String";
        case DatabaseType.NText:
            return "DbType.String";
        case DatabaseType.NVarChar:
            return "DbType.String";
        case DatabaseType.Object:
            return "DbType.Object";
        case DatabaseType.Real:
            return "DbType.Decimal";
        case DatabaseType.SmallDate:
            return "DbType.Date";
        case DatabaseType.SmallCurrency:
            return "DbType.Decimal";
        case DatabaseType.Text:
            return "DbType.String";
        case DatabaseType.Timestamp:
            return "DbType.Binary";
        case DatabaseType.Guid:
            return "DbType.Guid";
        case DatabaseType.VarBinary:
            return "DbType.Binary";
        case DatabaseType.VarChar:
            return "DbType.String";
        default:
            return "DbType.Object";
    }
}

private string GetReaderMethod(DatabaseType type)
{
    switch(type)
    {
        case DatabaseType.Binary:
            return "GetBytes";
        case DatabaseType.Blob:
            return "GetBytes";
        case DatabaseType.Boolean:
            return "GetBoolean";
        case DatabaseType.Byte:
            return "GetByte";
        case DatabaseType.Char:
            return "GetString";
        case DatabaseType.Currency:
            return "GetDecimal";
        case DatabaseType.Date:
            return "GetDateTime";
        case DatabaseType.Decimal:
            return "GetDecimal";
        case DatabaseType.Float:
            return "GetDouble";
        case DatabaseType.Int64:
            return "GetInt64";
        case DatabaseType.Int32:
            return "GetInt32";
        case DatabaseType.Int16:
            return "GetInt16";
        case DatabaseType.NChar:
            return "GetString";
        case DatabaseType.NText:
            return "GetString";
        case DatabaseType.NVarChar:
            return "GetString";
        case DatabaseType.Object:
            return "";
        case DatabaseType.Real:
            return "GetFloat";
        case DatabaseType.SmallDate:
            return "GetDateTime";
        case DatabaseType.SmallCurrency:
            return "GetDecimal";
        case DatabaseType.Text:
            return "GetString";
        case DatabaseType.Timestamp:
            return "GetBytes";
        case DatabaseType.Guid:
            return "GetGuid"; 
        case DatabaseType.VarBinary:
            return "GetBytes";
        case DatabaseType.VarChar:
            return "GetString";
        default:
            return "";
    }
}
#>