SQL-Ausnahme: „Konvertierung in Werttyp „Int32“ nicht möglich“
In Ihrer SQL-Abfrage versuchen Sie, die Summe der Spalte CreditHistory
in der Tabelle Amount
für einen bestimmten Benutzer zu berechnen. Wenn für diesen Benutzer jedoch kein Datensatz in der Tabelle CreditHistory
vorhanden ist, erhalten Sie die Fehlermeldung: „Kann nicht in den Werttyp „Int32“ konvertiert werden, da der materialisierte Wert null ist.“ Dies liegt daran, dass SQL SUM()
einen nullbaren Wert zurückgibt, wenn die zugrunde liegenden Daten Nullwerte enthalten, während C# in Ihrem Ergebnis einen nicht nullbaren int-Typ erwartet.
Um Nullwerte in Abfragen zu verarbeiten und diesen Fehler zu verhindern, können Sie verschiedene Techniken anwenden:
Verwenden Sie DefaultIfEmpty
:
Ändern Sie Ihre Abfrage so, dass sie Sum()
verwendet, bevor Sie DefaultIfEmpty(0)
anwenden. Dadurch wird sichergestellt, dass das Ergebnis standardmäßig Null und nicht leer ist, wenn ein Datensatz nicht gefunden wird:
<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>
Nullfähige Datentypen verwenden:
Ändern Sie den Typ der Spalte CreditHistory
in der Tabelle Amount
in einen Typ, der NULL-Werte zulässt, z. B. int?
. Dadurch kann Ihre Abfrage Nullwerte zurückgeben:
<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>
Verwenden Sie COALESCE
:
Verwenden Sie die Funktion COALESCE
, um Nullwerte durch angegebene Werte zu ersetzen. In diesem Beispiel können Sie mit ISNULL(ch.Amount, 0)
oder COALESCE(ch.Amount, 0)
nach Nullwerten suchen und diese in der SQL-Anweisung durch Nullen ersetzen:
<code class="language-sql">SELECT ISNULL(SUM(Amount), 0) AS CreditsSum FROM CreditHistory WHERE UserID = @userID;</code>
Dann erhalten Sie das Ergebnis direkt in C#.
Durch die Anwendung dieser Techniken können Sie Nullwerte in Abfragen effizient verarbeiten und Fehler „Kann nicht in Werttyp konvertieren“ vermeiden. Welche Methode Sie wählen, hängt von Ihren Vorlieben und Ihrem Datenbanksystem ab. Die Methoden 2 und 3 verarbeiten Nullwerte direkter auf der Datenbankseite, während Methode 1 sie auf der C#-Seite verarbeitet.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullwerten in SQL SUM() um, um den Fehler „Die Umwandlung in den Werttyp „Int32' ist fehlgeschlagen' zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!