Comment convertir au mieux un DbType en System.Type?
Question
Comment convertir au mieux une valeur d'énumération System.Data.DbType en valeurs System.Type correspondantes (ou au moins une des valeurs possibles correspondantes)?
Par exemple:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
Je n'ai vu que très " sale " solutions mais rien de vraiment propre.
(oui, c’est un suivi d’une autre question, mais c’était plus logique comme question distincte)
La solution
Autant que je sache, il n’existe pas de convertisseur intégré dans .NET pour la conversion d’un SqlDbType en un System.Type. Mais en connaissant le mappage, vous pouvez facilement lancer votre propre convertisseur, du simple dictionnaire aux solutions plus avancées (basées sur XML pour l’extensibilité).
La cartographie peut être trouvée ici: http://www.carlprothman.net/Default.aspx?tabid=97
Autres conseils
Les objets System.Data.SqlClient utilisent le composant MetaType pour convertir les types DbType et SqlDbType en types de CLR .NET. En utilisant la réflexion, vous pouvez utiliser cette capacité si nécessaire:
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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow