如何最好地将DbType转换为System.Type?
问题描述:
如何最好地将System.Data.DbType枚举值转换为对应的(或至少一个可能对应的)System.Type值?如何最好地将DbType转换为System.Type?
例如:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
我只看到很“脏”的解决方案,但没有真正干净。
(是的,这是一个后续行动,我的一个不同的问题,但它使更多的意义,因为两个不同的问题)
答
AFAIK没有内置在.NET转换器的SqlDbType转换为系统。类型。但了解映射,您可以轻松地将您自己的转换器从简单字典转换为更高级(基于可扩展性的XML)解决方案。
映射可以在这里找到: http://www.carlprothman.net/Default.aspx?tabid=97
答
System.Data.SqlClient的对象使用元类型组件的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;
虽然这似乎是工作,我认为这是一个无证的呼叫,可能无法在框架的未来版本和/或可能不提供非.NET的Windows版本? – 2015-01-16 12:11:10