Supporto dei valori Null e confronti di logica a tre valori

Si applica a:SQL Server

Se si ha familiarità con i tipi di dati di SQL Server, la semantica e la precisione simili sono disponibili nello spazio dei nomi System.Data.SqlTypes in .NET Framework. Esistono tuttavia alcune differenze, le più importanti delle quali sono illustrate nel presente argomento.

Valori NULL

Una differenza principale tra i tipi di dati CLR (Common Language Runtime) nativi e i tipi di dati di SQL Server è che il primo non consente valori NULL, mentre quest'ultimo fornisce semantica NULL completa.

La presenza di valori NULL influisce sui confronti. Quando si confrontano due valori x e y, se x o y è NULL, alcuni confronti logici restituiscono un valore UNKNOWN anziché True o False.

Tipo di dati SqlBoolean

Lo spazio dei nomi System.Data.SqlTypes introduce un tipo SqlBoolean per rappresentare questa logica a 3 valori. I confronti tra qualsiasi Tipo Sql restituiscono un tipo di valore SqlBoolean . Il valore UNKNOWN è rappresentato dal valore Null del tipo SqlBoolean . Le proprietà IsTrue, IsFalse e IsNull vengono fornite per controllare il valore di un tipo SqlBoolean.

Operazioni, funzioni e valori NULL

Tutti gli operatori aritmetici (+, -, *, /, %), operatori bit per bit (~, &, e |) e la maggior parte delle funzioni restituisce NULL se uno degli operandi o degli argomenti di SqlTypes è NULL. La proprietà IsNull restituisce sempre un valore true o false.

Precision

I tipi di dati decimali in CLR di .NET Framework hanno valori massimi diversi rispetto a quelli dei tipi di dati numerici e decimali in SQL Server. Inoltre, nei tipi di dati decimali CLR di .NET Framework si presuppone la precisione massima. In CLR per SQL Server, tuttavia, SqlDecimal fornisce la stessa precisione e scala massima e la stessa semantica del tipo di dati decimal in SQL Server.

Rilevamento dell'overflow

In .NET Framework CLR, l'aggiunta di due numeri molto grandi potrebbe non generare un'eccezione. Se invece non è stato utilizzato alcun operatore di controllo, il risultato restituito potrebbe essere un numero intero negativo. In System.Data.SqlTypes vengono generate eccezioni per tutti gli errori di overflow e underflow e gli errori di divisione per zero.

Vedi anche

Tipi di dati di SQL Server in .NET Framework