DbType을 System.Type으로 가장 잘 변환하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/91160

  •  01-07-2019
  •  | 
  •  

문제

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top