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(); }
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; }
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);
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!