Pergunta

Preciso de alguns conselhos de esperança sobre como lidar com o seguinte:- Eu tenho um campo de dados misc_text_2 que é do tipo varchar (25) e permite nulo. Agora, se eu usar a seguinte sintaxe

<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>

Eu continuo obtendo uma exceção de erro Detalhes: System.inValidCastException: a conversão do tipo 'dbNull' para digite 'string' não é válida.

Eu sei que estou perdendo alguma coisa, mas o que ...

desde já, obrigado

Foi útil?

Solução

Você pode em sua consulta SQL Usar isNull (misc_text_2, '') para retornar a string vazia em vez de dbnull.

Outras dicas

Você deve verificar explicitamente para DBNull.Value e faça a conversão você mesmo.

Em outras palavras, construa um método que fará a conversão para você, tomando DBNull.Value em conta.

Não respondendo à sua pergunta, mas: você realmente deve criar um código por trás do método que faça a conversão. Isso tornará o código mais fácil de entender e depurar e possibilitará a reutilização do código.

Cada vez que você usa a avaliação, você precisa de uma avaliação preguiçosa, de alguma forma. Para fazer isso, substitua cada instância de:

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

com

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

o OrElse impedirá qualquer tentativa de conversão de um dbnull em booleano. No entanto, de uma perspectiva mais fundamental, o Bang é mais corrigido. Tudo isso deve ser feito código-behind, provavelmente no manipulador de eventos ItemDatabound (ou RowDatabound).

Após mais reflexão ...

O OP também pode fazer uso do Convert.ToString() Método em seu código, que converterá DBNulls em String.Empty.

Como temos um banco de dados herdado configurado para o MS-Dynamics (Solomon), nosso método de manusear nulos é convertê-los em seqüências nulas no código ASP ou VB.NET. ou seja

Trim$(misc_text_2 & " ")

Livre -se do problema para qualquer versão do VB.

Se você estiver usando o designer de conjuntos de dados, a maneira mais fácil de se livrar desse erro é alterar as propriedades da coluna respeitada.

Exceção de NullValue a "vazio" em vez de "Exceção de arremesso".

Espero que isso ajude a todos.

Para converter dbnull ou isdbnull, você pode tentar as seguintes maneiras:

  1. Converter dbnull em uma corda vazia

    (Dbnullobj) .ToString

  2. Crie uma função de conversor dbnull

    Função pública ConvertdBNullToString (dbnullobj como objeto) como string

    Se isdbnull (dbnullobj) então

    Retorna ""

    fim se

    Retornar dbnullobj

    Função final

Como o SpiritUMTP sugeriu, se você estiver usando o designer do conjunto de dados, altere o datacolumn.nullValue de "Exceção de arremesso" para "vazio" ou "nada". Eu escolhi o último e resolveu o problema. Agora, apenas verifico nada (se não estiver (columnfax) então ...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top