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.