¿Cómo manejo la conversión del tipo 'dbnull' a type 'string' no es válida

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

  •  22-08-2019
  •  | 
  •  

Pregunta

Necesito algunos consejos sobre cómo manejar lo siguiente:- Tengo un campo de datos Misc_text_2 que es de tipo varchar (25) y permite nulo. Ahora si uso la siguiente sintaxis

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

Sigo obteniendo una excepción de error Detalles: System.InvalidCastException: La conversión del tipo 'dbnull' al tipo de 'cadena' no es válida.

Sé que me estoy perdiendo algo, pero qué ...

Gracias por adelantado

¿Fue útil?

Solución

Puede en su consulta SQL usar isnull (misc_text_2, '') para devolver en cadena vacía en lugar de dbnull.

Otros consejos

Debe verificar explícitamente DBNull.Value y haz la conversión tú mismo.

En otras palabras, cree un método que haga la conversión por usted, tomando DBNull.Value en cuenta.

Sin responder a su pregunta, pero: realmente debe crear un método de código detrás de la conversión. Eso hará que el código sea más fácil de entender y depurar, y hará posible reutilizar el código.

Cada vez que usa la evaluación de Eval, de alguna manera debe escapar de una evaluación perezosa. Para hacerlo, reemplace cada instancia de:

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

con

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

los OrElse evitará cualquier intento de conversión de un dbnull a booleano. Sin embargo, desde una perspectiva más fundamental, Bang es más correcta. Todo esto debería hacerse en código, probablemente en el manejador de eventos itemDatabound (o RowDatabound).

Al reflexionar más ...

El OP también podría hacer uso del Convert.ToString() Método en su código, que convertirá dbnulls en string.empty.

Dado que tenemos una base de datos heredadas que se configuró para MS-Dynamics (Solomon), nuestro método de manejo de NULLS es convertirlas en cadenas nulas, ya sea en el código ASP o VB.NET. es decir

Trim$(misc_text_2 & " ")

Deshabilita el problema para cualquier versión de VB.

Si está utilizando Data Set Designer, la forma más fácil de deshacerse de este error es cambiar las propiedades de la columna respetada.

Excepción NullValue a "vacía" en lugar de "Excepción de lanzamiento".

Espero que esto los ayude a todos.

Para convertir dbnull o isdbnull, puede probar esta forma:

  1. Convertir dbnull en una cadena vacía

    (DbnulLobj) .Tostring

  2. Crear una función de convertidor dbnull

    Función pública convertdbnullToString (dbnulLobj como objeto) como cadena

    Si isdbnull (dbnulLobj) entonces

    devolver ""

    terminara si

    regresar dbnulLobj

    Función final

Como sugirió SpiritUmtp, si está utilizando el diseñador del conjunto de datos, cambie DataColumn.NullValue de "Excepción de lanzamiento" a "vacío" o "nada". Elegí el último y solucionó el problema. Ahora solo verifico la nada (si no está (columnfax) entonces ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top