如何将System.Data.DbType枚举值最佳转换为相应的(或至少一个可能的相应)System.Type值?
例如:
DbType.StringFixedLength -> System.String
DbType.String -> System.String
DbType.Int32 -> System.Int32
我只看到非常“肮脏”的解决方案,但没有真正干净。
(是的,这是对我的另一个问题的跟进,但它作为两个单独的问题更有意义)
答案 0 :(得分:6)
AFAIK .NET中没有用于将SqlDbType转换为System.Type的内置转换器。但是,了解映射后,您可以轻松地将自己的转换器从简单的字典转换为更高级的(基于XML的可扩展性)解决方案。
可以在此处找到映射: http://www.carlprothman.net/Default.aspx?tabid=97
答案 1 :(得分:4)
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;