Czytałem dokumentację i przykłady MSDN here i wiem, że poprawna składnia dla Paramters.Add
zaproszenia jest:Różnica między Parameters.Add i Parameters.AddWithValue
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
gdzie trzeba podać nazwę parametru, SqlDbType
ORAZ wartość z .Value
.
Teraz poprawna składnia dla Parameters.AddWithValue
zaproszenia jest:
command.Parameters.AddWithValue("@demographics", demoXml);
Pojedyncza linia i pominąć Type
część.
Moje pytanie brzmi: Jak to jest, że kiedy robię to tak,
command.Parameters.Add("@demographics", demoXml);
// .Add method with .AddWithValue syntax
nie dostanę żadnej kompilacji błąd i jeszcze dziwniejsze, wszystko wydaje się działać poprawnie, gdy kod jest wykonywany?
Jedyną rzeczą jest to, będziesz musiał żyć z nowym ostrzeżeniem dla każdego parametru dodać ten sposób. – phadaphunk
Tak, ostrzeżenie jest takie, ponieważ ** to przeciążenie jest przestarzałe **, jak zaznaczono w dokumentacji. Również z dokumentacji "Należy zachować ostrożność, gdy używasz tego przeciążenia metody SqlParameterCollection.Add, aby określić wartości parametrów całkowitych." –
W przypadku kogoś, kto jest ciekawy jak ja, zastanawia się, dlaczego zero może niejawnie konwertować do wyliczenia, ale nie do żadnej innej liczby całkowitej. Oto link do wyjaśnienia SO, http://stackoverflow.com/questions/14950750/why-switch-for-enum-accepts-implicit-conversion-to-0- but-no- for-any-other-intege –