Каков наилучший способ найти значение перечисления System.Data.DbType
для типов библиотеки базовых классов в пространстве имен System?
Я знаю, что это - старый вопрос, на который уже отвечают, но существует более легкий путь при помощи SqlParameter
, которому уже реализовали эту логику. Это специфично для [1 113] SqlServer, но поставщики для [1 114] Postgre, MySql.. и т.д. имейте соответствующие реализации.
Вот полная функция, которая обрабатывает не допускающие NULL-значения, nullable типы примитивов , десятичное число и строка
public static DbType GetDbType(Type runtimeType)
{
var nonNullableType = Nullable.GetUnderlyingType(runtimeType);
if (nonNullableType != null)
{
runtimeType = nonNullableType;
}
var templateValue = (Object)null;
if (runtimeType.IsClass == false)
{
templateValue = Activator.CreateInstance(runtimeType);
}
var sqlParamter = new SqlParameter(parameterName: String.Empty, value: templateValue);
return sqlParamter.DbType;
}
<час> , Как получить SqlParameter:
Для [1 120] SqlServer, в зависимости от Вашей .netframework версии можно найти эти SqlParamter
тип в [1 121] Система. Данные , Система. Данные. SqlClient nuget и Microsoft. Данные. <Час> SqlClient nuget
Исходный код для SqlParameter:
реализация SqlParameter использует эта часть кода , который достаточно близок к тому, что предлагает принятый ответ.