Maison > développement back-end > C++ > Comment éviter 'Impossible de lancer un objet de type 'System.dbnull' pour taper 'System.String'' Erreurs dans les requêtes de base de données C #?

Comment éviter 'Impossible de lancer un objet de type 'System.dbnull' pour taper 'System.String'' Erreurs dans les requêtes de base de données C #?

Linda Hamilton
Libérer: 2025-01-25 10:16:14
original
732 Les gens l'ont consulté

How to Avoid

Résolution de l'erreur « Impossible de convertir un objet de type « System.DBNull » en type « System.String » » dans les requêtes de base de données

Les interactions avec la base de données peuvent parfois générer l'exception "Impossible de convertir un objet de type 'System.DBNull' en type 'System.String'". Cela se produit lorsque vous essayez de convertir directement une valeur de base de données System.DBNull en chaîne. Explorons des solutions pour éviter cela.

Voici un extrait de code révisé démontrant une approche robuste :

public string GetCustomerNumber(Guid id)
{
   object accountNumber = DBSqlHelperFactory.ExecuteScalar(connectionStringSplendidCRM, 
                                                          CommandType.StoredProcedure, 
                                                          "spx_GetCustomerNumber", 
                                                          new SqlParameter("@id", id));

   return accountNumber is DBNull ? string.Empty : accountNumber.ToString();
}
Copier après la connexion

Cette version améliorée évite le casting direct. Il utilise l'opérateur conditionnel (?:) pour vérifier si accountNumber est DBNull. Si c'est le cas, une chaîne vide est renvoyée ; sinon, ToString() convertit l'objet en toute sécurité en chaîne.

Pour une solution plus polyvalente, pensez à cette fonction générique :

public static T ConvertFromDBVal<T>(object obj)
{
    if (obj == null || obj == DBNull.Value)
    {
        return default(T); // Returns the default value for the specified type
    }
    return (T)obj;
}
Copier après la connexion

Cette fonction générique gère différents types de données. Vous spécifiez le type de cible à l'aide de paramètres de type, permettant des conversions sûres et de type correct :

return ConvertFromDBVal<string>(accountNumber);
Copier après la connexion

Cette approche est plus propre, plus réutilisable et moins sujette aux erreurs de casting. En implémentant ces méthodes, vous pouvez gérer efficacement les valeurs DBNull et empêcher l'erreur « Impossible de convertir un objet de type 'System.DBNull' en type 'System.String'" de perturber les opérations de votre base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal