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)

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top