Pergunta

Como faço para melhor converter um valor System.Data.DbType enumeração para o correspondente (ou pelo menos um dos possíveis correspondente) valores System.Type?

Por exemplo:

DbType.StringFixedLength -> System.String 
DbType.String -> System.String
DbType.Int32 -> System.Int32

Eu só vi próprias soluções "sujas", mas nada realmente limpo.

(sim, é um seguimento a uma pergunta diferente da minha, mas fazia mais sentido como duas questões separadas)

Foi útil?

Solução

AFAIK não há nenhum conversor embutido em .NET para converter um SqlDbType a um System.Type. Mas saber o mapeamento pode facilmente rolar o seu próprio conversor variando de um dicionário mais simples ao mais avançado (baseado em XML para extensability) soluções.

O mapeamento pode ser encontrada aqui: http://www.carlprothman.net/Default.aspx?tabid=97

Outras dicas

objetos System.Data.SqlClient usar o componente MetaType para traduzir DbType e SqlDbType para Tipos .NET CLR. Usando a reflexão, você pode aproveitar essa capacidade, se necessário:

var dbType = DbType.Currency;

Type metaClrType = Type.GetType(
    "System.Data.SqlClient.MetaType, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
    true,
    true
    );

object metaType = metaClrType.InvokeMember(
    "GetMetaTypeFromDbType",
    BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic,
    null,
    null,
    new object[] { dbType }
);

var classType = (Type)metaClrType.InvokeMember(
    "ClassType",
    BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic,
    null,
    metaType,
    null
);

string cSharpDataType = classType.FullName;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top