Как справиться с преобразованием из типа «dbnull», чтобы введите «строку», не действителен

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

  •  22-08-2019
  •  | 
  •  

Вопрос

Мне нужны некоторые ожидаемые советы о том, как обработать следующее:- У меня есть поле данных MISC_TEXT_2, который имеет тип VARCHAR (25) и позволяет NULL. Теперь, если я использую следующий синтаксис

<asp:Label ID="lblPrinter" runat="server"  Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2") like "KP1", "Kitchen Printer 1", iif(eval("misc_text_2") like "KP2", "Kitchen Printer 2", iif(eval("misc_text_2") like "KP3", "Kitchen Printer 3", iif(eval("misc_text_2") like "BP1", "Bar Printer 1", iif(eval("misc_text_2") like "BP2", "Bar Printer 2", iif(eval("misc_text_2") like "BP3", "Bar Printer 3", Eval("misc_text_2")))))))))%>'></asp:Label>

Я продолжаю получать подробности исключения ошибки: System.invalidcastException: преобразование из типа «dbnull» в тип «строки» недопустимо.

Я знаю, что что -то упускаю, но что ...

заранее спасибо

Это было полезно?

Решение

В своем SQL -запросе вы можете использовать isnull (misc_text_2, ''), чтобы вернуть пустую строку вместо dbnull.

Другие советы

Вы должны явно проверить на наличие DBNull.Value И сделай обращение самостоятельно.

Другими словами, создайте метод, который сделает конверсию для вас, принимая DBNull.Value в учетную запись.

Не отвечая на ваш вопрос, но: вы должны действительно создать код, стоящий за методом, который делает преобразование. Это сделает код легче для понимания и отладки, и позволит повторному использованию кода.

Каждый раз, когда вы используете Eval, вы должны каким-то образом преодолеть ленивую оценку. Для этого замените каждый экземпляр:

iif(eval("misc_text_2") like ...

с

iif(IsDbNull(eval("misc_text_2")) OrElse eval("misc_text_2") like ...

А OrElse предотвратит любую попытку преобразования dbnull в логический. Тем не менее, с более фундаментальной точки зрения, Bang является наиболее корректным. Все это должно быть сделано Code-Behind, вероятно, в обработчике событий ItemDatabound (или RowDatabound.

При дальнейшем размышлении ...

OP может также использовать Convert.ToString() Метод в его коде, который преобразует dbnulls в string.empty.

Поскольку у нас есть устаревшая база данных, которая была настроена для MS-Dynamics (Solomon), наш метод обработки Nulls заключается в преобразовании их в нулевые строки либо в коде ASP, либо VB.NET. т.е.

Trim$(misc_text_2 & " ")

Избавляется от проблемы для любой версии VB.

Если вы используете дизайнер набора данных, самый простой способ избавиться от этой ошибки - это изменить свойства уважаемого столбца.

Nullvalue исключение из «пустого» вместо «бросания исключения».

Надеюсь, это поможет вам всем.

Для преобразования dbnull или iSdbnull вы можете попробовать эти способы:

  1. Преобразовать DBNull в пустую строку

    (Dbnullobj).

  2. Создать функцию преобразователя dbnull

    Публичная функция ConvertDBnullToString (dbnullobj как объект) как строка

    Если iSdbnull (dbnullobj), тогда

    возвращаться ""

    конец, если

    вернуть dbnullobj

    Конечная функция

Как предложил SpiritumTP, если вы используете дизайнер набора данных, измените DataColumn.nullvalue с «исключения броска» на «пустое» или «ничего». Я выбрал последний, и это исправило проблему. Теперь я просто ничего не проверяю (если не является IStoThing (ColumnFax), тогда ...)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top