Partager via


Possibilité de valeur Null et comparaisons logiques de trois valeurs

Si vous avez une bonne connaissance des types de données SQL Server, vous trouverez une sémantique et une précision semblables dans l'espace de noms System.Data.SqlTypes dans le .NET Framework. Il existe toutefois certaines différences, dont les principales sont décrites dans cette rubrique.

Valeurs Null

L'une des principales différences entre les types de données SQL Server et les types de données CLR (Common Language Runtime) natifs porte sur le fait que ceux-ci n'autorisent pas les valeurs Null, tandis que ceux-là fournissent une sémantique Null complète.

Les comparaisons sont affectées par les valeurs Null. Lors de la comparaison de deux valeurs x et y, si x ou y a la valeur Null, certaines comparaisons logiques évaluent à une valeur UNKNOWN plutôt que true ou false.

Type de données SqlBoolean

L'espace de noms System.Data.SqlTypes introduit un type SqlBoolean pour représenter cette logique à 3 valeurs. Les comparaisons entre des SqlTypes retournent un type de valeur SqlBoolean. La valeur UNKNOWN est représentée par la valeur Null du type SqlBoolean. Les propriétés IsTrue, IsFalse et IsNull sont fournies afin de vérifier la valeur d'un type SqlBoolean.

Opérations, fonctions et valeurs Null

Tous les opérateurs arithmétiques (+, -, *, /,%), opérateurs au niveau du bit (~, & et |) et la plupart des fonctions retournent Null si l'un des opérandes ou arguments de SqlTypes est Null. La propriété IsNull retourne toujours une valeur true ou false.

Précision

Les types de données décimaux dans le CLR .NET Framework ont des valeurs maximales différentes de celles des types de données numériques et décimaux dans SQL Server. De plus, dans le CLR .NET Framework, les types de données décimaux supposent la précision maximale. Dans le CLR pour SQL Server, en revanche, SqlDecimal fournit les mêmes échelle et précision maximale, ainsi que la même sémantique que le type de données décimal dans SQL Server.

Détection de dépassement de capacité

Dans le CLR .NET Framework, l'addition de deux très grands nombres peut ne pas lever d'exception. Au lieu de cela, si aucun opérateur de contrôle n'a été utilisé, le résultat retourné peut être « enveloppé » en tant qu'entier négatif. Dans System.Data.SqlTypes, des exceptions sont levées pour toutes les erreurs de dépassement de capacité et de dépassement de précision et pour les erreurs de division par zéro.