Wie kann ich am besten konvertieren ein DbType System.Type?
Frage
Wie konvertiere ich am besten einen System.Data.DbType Enumerationswerts zu der entsprechenden (oder zumindest eine der möglichen entspricht) System.Type Werte?
Zum Beispiel:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
Ich habe nur sehr „schmutzige“ Lösungen, aber nichts wirklich sauber gesehen.
(ja, es ist ein auf eine andere Frage von mir folgen, aber es machte mehr Sinn als zwei getrennte Fragen)
Lösung
AFAIK gibt es keine integrierten Konverter in .NET ist für eine SqlDbType zu einer System.Type konvertieren. Aber die Zuordnung zu wissen, können Sie einfach Ihre eigenen Konverter rollen von einem einfachen Wörterbuch bis hin zu fortgeschritteneren (XML-basierte für leichte Erweiterbarkeit) -Lösungen.
Die Abbildung ist hier zu finden: http://www.carlprothman.net/Default.aspx?tabid=97
Andere Tipps
System.Data.SqlClient Objekte verwenden, um die MetaType Komponente DbType und SqlDbType auf .NET CLR-Typen zu übersetzen. Mit Reflexion, könnten Sie diese Fähigkeit nutzen, wenn nötig:
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;