如何最好地将 System.Data.DbType 枚举值转换为相应的(或至少一个可能的相应)System.Type 值?

例如:

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

我只见过非常“肮脏”的解决方案,但没有真正干净的。

(是的,这是我的另一个问题的后续,但作为两个单独的问题更有意义)

有帮助吗?

解决方案

据我所知,.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