Как мне лучше всего преобразовать DbType в System.Введите?

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

  •  01-07-2019
  •  | 
  •  

Вопрос

Как мне наилучшим образом преобразовать значение перечисления 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top