Вы, кажется, перепутали некоторые вещи здесь, или я не понимаю, что вы пытаетесь сделать. DbType
(перечисление) наследует Enum
, и это реализует IConvertible
-> Вы можете позвонить GetTypeCode()
. Но - вы сейчас звоните Enum.GetTypeCode()
, который возвращает базовый тип. Если вы не указали это (а DbType
не сделал), то любой Enum
будет поддержан int
.
Что вы пытаетесь решить с помощью кода в любом случае? Зачем вам хотеть изменить тип строки, если параметром является строка (хотя и с фиксированной длиной)?
Глядя на вопрос еще немного, он кажется еще более странным. У вас есть объект v (вероятно, для значения?) - что вас интересует в типе?
object v1 = "Foo";
object v1 = 42;
Какая для вас разница? Я предполагаю, что вы хотите передать значения чему-то другому, но - если вы ссылаетесь только на значение как object
, вам все равно может потребоваться его приведение.
Пожалуйста, обновите ваш вопрос и объясните, что вы действительно хотите сделать, что вы ожидаете получить.
По поводу комментария:
Я использую Convert.ChangeType (object
значение, TypeCode typeCode), так что это не
действительно превращается в Enum / Int. В
хотя бы это то, что я думал ...
См. Выше: DbType.GetTypeCode()
не то, что вы хотите. Попробуйте, дайте мне преимущество сомнения: что вы ожидаете получить от DbType.AnsiStringFixedLength.GetTypeCode()
? Каков реальный результат, если вы попробуете это?
Теперь к вашему коду: вы пытаетесь установить для свойства SqlParameter.Value
«правильный» тип. Две вещи: Согласно документации, вы, вероятно, хотите установить SqlParameter.SqlValue
, который является значением с использованием типов SQL согласно документам. SqlParameter.Value
, с другой стороны, является значением с использованием типов CLR и позволяет выводить как DbType, так и SqlValue. Sidenote, подробности реализации: Установщик SqlParameter.SqlValue
просто вызывает установщик SqlParameter.Value
снова ...
Я ожидаю, что ADO.NET преобразует значение самостоятельно, если это вообще возможно. Какую ошибку вы получаете, не перепрыгивая через эти обручи?