Saltar al contenido

No se puede convertir el objeto del tipo ‘System.DBNull’ al tipo ‘System.String`

Posterior a de esta extensa selección de datos dimos con la solución esta aprieto que suelen tener algunos de nuestros usuarios. Te regalamos la respuesta y nuestro objetivo es que sea de gran ayuda.

Solución:

Con una función genérica simple, puede hacer esto muy fácil. Solo haz esto:

return ConvertFromDBVal(accountNumber);

usando la función:

public static T ConvertFromDBVal(object obj)
 obj == DBNull.Value)
    
        return default(T); // returns the default value for the type
    
    else
    
        return (T)obj;
    

Se puede usar una forma más corta:

return (accountNumber == DBNull.Value) ? string.Empty : accountNumber.ToString()

EDITAR: No he prestado atención a ExecuteScalar. Realmente regresa null si el campo está ausente en el resultado devuelto. Así que usa en su lugar:

return (accountNumber == null) ? string.Empty : accountNumber.ToString() 

ExecuteScalar volverá

  • null si no hay un conjunto de resultados
  • de lo contrario, la primera columna de la primera fila del conjunto de resultados, que puede ser DBNull.

Si sabe que la primera columna del conjunto de resultados es un stringluego, para cubrir todas las bases, debe verificar ambos null y DBNull. Algo como:

object accountNumber = ...ExecuteScalar(...);
return (accountNumber == null) ? String.Empty : accountNumber.ToString();

El código anterior se basa en el hecho de que DBNull.ToString devuelve un vacío string.

Si el número de cuenta fuera de otro tipo (por ejemplo, un número entero), entonces debería ser más explícito:

object accountNumber = ...ExecuteScalar(...);
return (accountNumber == null || Convert.IsDBNull(accountNumber) ?     
         (int) accountNumber : 0;

Si está seguro de que su conjunto de resultados siempre tendrá al menos una fila (p. ej., SELECCIONE CONTEO null…), entonces puede omitir la verificación de

. string En su caso, el mensaje de error “No se puede convertir el objeto de tipo ‘System.DBNull’ para escribir ‘System.String`” indica que la primera columna de su conjunto de resultados es un valor DBNUll. Esto es del elenco para

string accountNumber = (string) ... ExecuteScalar(...);

en la primera línea:

El comentario de Marc_s de que no necesita verificar DBNull.Value es incorrecto.

Comentarios y calificaciones

Si estás de acuerdo, puedes dejar un artículo acerca de qué le añadirías a este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *