9

System.Data.DbType列挙値を対応する(または対応する可能性のある少なくとも1つの)System.Type値に変換するにはどうすればよいですか?

例えば:

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

私は非常に「汚い」解決策を見ただけですが、本当にきれいなものは何もありません。

(はい、それは私の別の質問へのフォローアップですが、2つの別々の質問としてより理にかなっています)

4

2 に答える 2

6

AFAIK SqlDbTypeをSystem.Typeに変換するための、.NETには組み込みのコンバーターはありません。しかし、マッピングを知っていると、単純な辞書からより高度な(拡張性のためのXMLベースの)ソリューションに至るまで、独自のコンバーターを簡単に作成できます。

マッピングはここで見つけることができます:http: //www.carlprothman.net/Default.aspx?tabid = 97

于 2008-09-18T09:24:53.907 に答える
4

System.Data.SqlClient オブジェクトは、MetaType コンポーネントを使用して、DbType および SqlDbType を .NET CLR 型に変換します。リフレクションを使用すると、必要に応じてこの機能を活用できます。

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;
于 2013-09-04T19:15:18.710 に答える