Как мне лучше всего преобразовать DbType в System.Введите?
Вопрос
Как мне наилучшим образом преобразовать значение перечисления System.Data.DbType в соответствующее (или хотя бы одно из возможных соответствующих) System.Значения типа?
Например:
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;