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
Linda Hamiltonoriginal
2025-01-25 10:16:14736parcourir

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 :

<code class="language-csharp">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();
}</code>

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 :

<code class="language-csharp">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;
}</code>

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 :

<code class="language-csharp">return ConvertFromDBVal<string>(accountNumber);</code>

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