Zulässigkeit von NULL-Werten und Vergleiche mit dreiwertiger Logik
Wenn Sie mit den SQL Server-Datentypen vertraut sind, finden Sie eine ähnliche Semantik und Genauigkeit im System.Data.SqlTypes-Namespace in .NET Framework. Es gibt jedoch einige Unterschiede, und die wichtigsten dieser Unterschiede werden in diesem Thema behandelt.
NULL-Werte
Ein Hauptunterschied zwischen den systemeigenen CLR (Common Language Runtime)-Datentypen und den SQL Server-Datentypen besteht darin, dass Erstere keine NULL-Werte zulassen, Letztere dagegen die uneingeschränkte NULL-Semantik bereitstellen.
Vergleiche werden durch NULL-Werte beeinflusst. Wenn die beiden Werte x und y verglichen werden und x oder y NULL ist, dann ergeben einige logische Vergleiche den Wert UNKNOWN statt true oder false.
SqlBoolean-Datentyp
Zur Darstellung dieser dreiwertigen Logik wurde im System.Data.SqlTypes-Namespace der SqlBoolean-Typ eingeführt. Vergleiche zwischen beliebigen Werten des Typs SqlTypes ergeben einen Wert des SqlBoolean-Typs. Der UNKNOWN-Wert wird durch den NULL-Wert des SqlBoolean-Typs dargestellt. Die Eigenschaften IsTrue, IsFalse und IsNull dienen zur Überprüfung des Werts eines SqlBoolean-Typs.
Vorgänge, Funktionen und NULL-Werte
Alle arithmetischen Operatoren (+, -, *, /, %), bitweisen Operatoren (~, & und |) und die meisten Funktionen können NULL zurückgeben, wenn ein Operand oder Argument von SqlTypes NULL ist. Die IsNull-Eigenschaft gibt stets den Wert true oder false zurück.
Genauigkeit
Für Dezimaldatentypen in der .NET Framework-CLR gelten andere Maximalwerte als für die numerischen Datentypen und Dezimaldatentypen in SQL Server. Außerdem wird bei den Dezimaldatentypen der .NET Framework-CLR die maximale Genauigkeit angenommen. In der CLR für SQL Serverbietet SqlDecimal jedoch die gleiche maximale Genauigkeit und Dezimalstellenanzahl sowie die gleiche Semantik wie die Dezimaldatentypen in SQL Server.
Überlauferkennung
In der .NET Framework-CLR wird durch die Addition von zwei sehr großen Zahlen möglicherweise keine Ausnahme ausgelöst. Wenn kein Prüfvorgang verwendet wurde, dann wird das zurückgegebene Ergebnis möglicherweise als negative Ganzzahl dargestellt. In System.Data.SqlTypes werden Ausnahmen für alle Überlauf- und Unterlauffehler sowie Fehler aufgrund einer Division durch 0 ausgelöst.