Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego konstruktor nazwy/wartości SqlParameter traktuje 0 jako null?

Jak stwierdzono w dokumentacji dla tego konstruktora:

Po prostu wywołałeś innego konstruktora, niż myślałeś w swoim przypadku.

Powodem tego jest to, że C# pozwala na niejawne konwersja z literału całkowitego 0 do typów wyliczeniowych (które są po prostu typami całkowitymi poniżej), a ta niejawna konwersja powoduje, że (string, SqlDbType) Konstruktor lepiej pasujący do rozwiązywania przeciążeń niż konwersja z boksami niezbędna do konwersji int do object dla (string, object) konstruktor.

To nigdy nie będzie problemem, gdy zdasz int zmienna , nawet jeśli wartość tej zmiennej to 0 (ponieważ nie jest to literał zerowy) lub jakiekolwiek inne wyrażenie typu int . Nie stanie się to również, jeśli jawnie rzucisz int do object jak widać powyżej, ponieważ wtedy jest tylko jedno pasujące przeciążenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server DOWOLNY operator wyjaśniony

  2. Rzadkie kolumny w SQL Server:wpływ na czas i przestrzeń

  3. Używanie sp_help_jobschedule w SQL Server

  4. Przezroczyste szyfrowanie danych (TDE) w SQL Server w grupie dostępności AlwaysOn na przykładzie

  5. Zachowanie ORDER BY w SELECT INTO