Domanda

Come posso mantenere al meglio la conversione di un Sistema.Dati.DbType enumeration value corrispondente (o almeno uno dei possibili corrispondente) di Sistema.Tipo di valori?

Per esempio:

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

Ho visto solo molto "sporchi" soluzioni, ma nulla di veramente pulito.

(sì, è un follow-up di una questione diversa della mia, ma è più sensato come due separati domande)

È stato utile?

Soluzione

Per quanto ne so non c'è un convertitore in .NET per la conversione di un SqlDbType di un Sistema.Tipo.Ma conoscendo la mappatura si può facilmente arrotolare converter che vanno da un semplice dizionario, a quelli più avanzati (basato su XML per extensability) soluzioni.

La mappatura può essere trovato qui:http://www.carlprothman.net/Default.aspx?tabid=97

Altri suggerimenti

Sistema.Dati.SqlClient oggetti di utilizzare il MetaType componente di tradurre DbType e SqlDbType per .NET CLR Tipi.Utilizzo di riflessione, si potrebbe sfruttare questa capacità, se necessario:

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top