2011-01-27 2 views
4

Я пытаюсь преобразовать значения строк в SqlDbType. Мой код способен скрывать «текст» в SqlDbType.Text без каких-либо ошибок, но когда я пытаюсь преобразовать «бит» в SqlDbType.Bit, я получаю следующую ошибку: «Требуемое значение« бит »не было найдено».Преобразование строки в SqlDbType

То же самое происходит при попытке преобразования «int» в SqlDbType.Int Сообщение об ошибке: «Запрошенное значение« int »не было найдено».

Почему это работает для «текста», но не «бит» или «int»?

Dim MyType as String = "bit" 
Dim sdtype As SqlDbType 

sdtype = DirectCast([Enum].Parse(GetType(SqlDbType), MyType), SqlDbType) 

ответ

13

Поскольку значение перечисления является SqlDbType.Bit, а не SqlDbType.bit. Enum.Parse() чувствителен к регистру WRT для ввода.

Вы должны использовать эту перегрузку Enum.Parse:

SqlDbType type = (SqlDbType) Enum.Parse(typeof(SqlDbType) , "bit" , true) ; 

Третий параметр указывает, является ли (истина) или нет (ложь) случае следует игнорировать при разборе значение перечисления от строки.

0

Похоже, что он чувствителен к регистру. Попробуйте «бит» и посмотрите, получится ли это.

+0

Вы правы. Я просто замечаю, что есть флаг, который будет игнорировать случай. Я добавил True, и он работает! sdtype = DirectCast ([Enum] .Parse (GetType (SqlDbType), MyType), SqlDbType, True) – crjunk

0

Каков результат [Enum] .Parse (GetType (SqlDbType))? Это результат, которого вы ожидаете? Потому что я думаю, что ошибка может быть там.

В качестве последней альтернативы вы могли бы попробовать CTYpe вместо прямого трансляции? (http://msdn.microsoft.com/en-us/library/7k6y2h6x(VS.71).aspx)

CType немного более гибкий, однако я думаю, что это длинный снимок, но, возможно, стоит попробовать ,

Смежные вопросы