Maison >développement back-end >C++ >Comment gérer les valeurs nulles dans SQL SUM() pour éviter l'erreur « Échec de la conversion en valeur 'Int32' » ?
Exception SQL : 'Impossible de convertir en type de valeur 'Int32''
Dans votre requête SQL, vous essayez de calculer la somme de la colonne CreditHistory
de la table Amount
pour un utilisateur spécifique. Cependant, lorsqu'il n'y a aucun enregistrement pour cet utilisateur dans la table CreditHistory
, vous obtenez l'erreur : "Impossible de convertir en type de valeur 'Int32' car la valeur matérialisée est nulle". En effet, SQL SUM()
renvoie une valeur nullable lorsque les données sous-jacentes contiennent des valeurs nulles, alors que C# attend un type int non nullable dans votre résultat.
Pour gérer les valeurs nulles dans les requêtes et éviter cette erreur, vous pouvez utiliser plusieurs techniques :
Utiliser DefaultIfEmpty
:
Modifiez votre requête pour utiliser Sum()
avant d'appliquer DefaultIfEmpty(0)
. Cela garantit que si un enregistrement n'est pas trouvé, le résultat par défaut est zéro plutôt que vide :
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).DefaultIfEmpty(0).Sum();</code>
Utiliser des types de données nullables :
Changez le type de la colonne CreditHistory
dans la table Amount
en un type nullable, tel que int?
. Cela permet à votre requête de renvoyer des valeurs nulles :
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).Sum(); // Sum() will now handle nulls correctly ``` 或者更简洁的写法: ```csharp var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).Sum() ?? 0; // 使用null-coalescing operator</code>
Utiliser COALESCE
:
Utilisez la fonction COALESCE
pour remplacer les valeurs nulles par des valeurs spécifiées. Dans cet exemple, vous pouvez utiliser ISNULL(ch.Amount, 0)
ou COALESCE(ch.Amount, 0)
pour rechercher les valeurs nulles et les remplacer par des zéros dans l'instruction SQL :
<code class="language-sql">SELECT ISNULL(SUM(Amount), 0) AS CreditsSum FROM CreditHistory WHERE UserID = @userID;</code>
Recevez ensuite le résultat directement en C#.
En appliquant ces techniques, vous pouvez gérer efficacement les valeurs nulles dans les requêtes et éviter les erreurs « Impossible de convertir en type de valeur ». La méthode que vous choisissez dépend de vos préférences et de votre système de base de données. Les méthodes 2 et 3 gèrent les valeurs nulles plus directement du côté de la base de données, tandis que la méthode 1 les gère du côté C#.
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!