2008-09-18 17 views
9

Wie konvertiere ich am besten einen System.Data.DbType-Enumerationswert in den entsprechenden (oder mindestens einen der möglichen entsprechenden) System.Type-Werte?Wie konvertiere ich einen DbType am besten in System.Type?

Zum Beispiel:

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

ich nur sehr gesehen habe „schmutzige“ Lösungen, aber nichts wirklich sauber.

(ja, es ist ein auf eine andere Frage von mir folgen, aber es machte mehr Sinn als zwei getrennte Fragen)

Antwort

6

AFAIK gibt es keine integrierten Konverter in .NET für eine SqlDbType zu einem Klassensystem .Art. Wenn Sie jedoch das Mapping kennen, können Sie problemlos Ihren eigenen Converter erstellen, von einem einfachen Wörterbuch bis hin zu erweiterten (XML-basierten für Erweiterbarkeit) Lösungen. http://www.carlprothman.net/Default.aspx?tabid=97

4

System.Data.SqlClient Objekte die MetaType Komponente verwenden DbType und SqlDbType auf .NET CLR-Typen zu übersetzen:

Die Abbildung kann hier gefunden werden. Reflexion verwenden, können 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; 
+0

Während dies scheint zu funktionieren, gehe ich davon aus es ein nicht dokumentierte Anruf ist, die nicht in zukünftigen Versionen des Rahmen und/oder möglicherweise nicht verfügbar auf nicht verfügbar sein kann -Windows-Versionen von .NET? –

Verwandte Themen