Как преобразовать System.Type в System.Data.DbType?

Каков наилучший способ найти значение перечисления System.Data.DbType для типов библиотеки базовых классов в пространстве имен System?

31
задан Mike 31 October 2011 в 09:57
поделиться

1 ответ

Я знаю, что это - старый вопрос, на который уже отвечают, но существует более легкий путь при помощи 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 использует эта часть кода , который достаточно близок к тому, что предлагает принятый ответ.

1
ответ дан 27 November 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: