DbType을 System.Type으로 가장 잘 변환하려면 어떻게 해야 합니까?
문제
System.Data.DbType 열거형 값을 해당(또는 가능한 해당 중 하나 이상) System.Type 값으로 변환하는 가장 좋은 방법은 무엇입니까?
예를 들어:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
나는 매우 "더러운" 솔루션만을 보았지만 실제로 깨끗한 솔루션은 없었습니다.
(예, 그것은 내 다른 질문에 대한 후속 조치이지만 두 개의 별도 질문으로 더 의미가 있습니다)
해결책
AFAIK .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