DbType を System.Type に変換するにはどうすればよいですか?
質問
System.Data.DbType 列挙値を対応する (または対応する可能性のある少なくとも 1 つの) System.Type 値に変換するにはどうすればよいですか?
例えば:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
私は非常に「汚い」ソリューションしか見たことがありませんが、本当にきれいなものはありません。
(はい、これは私の別の質問のフォローアップですが、2 つの別々の質問として理解したほうが理にかなっています)
解決
私の知る限り、.NET には SqlDbType を System.Type に変換するための組み込みコンバーターがありません。ただし、マッピングを理解すれば、単純な辞書からより高度な (拡張性を目的とした XML ベースの) ソリューションに至るまで、独自のコンバーターを簡単に作成できます。
マッピングは次の場所にあります。http://www.carlprothman.net/Default.aspx?tabid=97
他のヒント
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;
所属していません StackOverflow