Różnica między Parameters.Add (string, object) i Parameters.AddWithValue
Przeczytałem dokumentację MSDN i przykłady
tutaj
http://msdn.microsoft.com/en-u ... .aspx
i znam poprawną składnię wywołania
Parameters.Add:
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
Gdzie musisz określić nazwę parametru, a następnie
SqlDbTypeORAZ wartość z
.Value.
Teraz poprawna składnia do wywołania
Parameters.AddWithValueto:
command.Parameters.AddWithValue("@demographics", demoXml);
Jedna linia i pomiń część
Type.
Moje pytanie brzmi: jak to się dzieje, kiedy robię to w ten sposób,
command.Parameters.Add("@demographics", demoXml);
// .Add method with .AddWithValue syntax
Nie otrzymuję żadnych błędów kompilacji i, co dziwne, czy wszystko wydaje się działać poprawnie, gdy kod jest wykonywany?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Powodem, dla którego porzucili stary na rzecz , jest dodanie większej przejrzystości, a także dlatego, że drugi parametr to , co nie czyni go od razu oczywistym niektórym osobom, które wywoływały przeciążenie , co spowodowało zupełnie inne zachowanie.
Spójrz na ten przykład:
Na pierwszy rzut oka wygląda na to, że wywołuje przeciążenie .
ale tak nie jest
... Wywołuje przeciążenie ! Dzieje się tak, ponieważ 0 jest niejawnie konwertowane na typy wyliczeniowe. Więc te dwie linijki:
i
W rzeczywistości powoduje to wywołanie dwóch różnych metod. nie jest niejawnie konwertowany na wyliczenie, więc wybiera przeciążenie . Z wybiera przeciążenie wyliczenia.
Anonimowy użytkownik
Potwierdzenie od:
W przypadku złożonych scenariuszy, takich jak (np. DateTime, float), prawdopodobnie użyję Add, ponieważ jest bardziej wyraźny, ale AddWithValue dla bardziej prostych scenariuszy, takich jak (Int to Int).
Anonimowy użytkownik
Potwierdzenie od:
Wadą tego jest to, że niejawna konwersja może nie być najbardziej optymalną z konwersji i może prowadzić do słabej wydajności.
Tutaj jest dyskusja na ten temat:
http://forums.asp.net/t/1200255. aspx/1
http://forums.asp.net/t/1200255.aspx/1
Anonimowy użytkownik
Potwierdzenie od:
dla
gdzie to parametr procedury składowanej, której typem danych jest
Anonimowy użytkownik
Potwierdzenie od:
Metoda akceptuje obiekt jako wartość. Nie ma sprawdzania typu danych typu. Może to potencjalnie prowadzić do błędu, jeśli typ danych nie jest zgodny z tabelą SQL. Metoda wymaga najpierw określenia typu bazy danych. Pomaga to zredukować te błędy.
Po więcej informacji,
proszę kliknąć tutaj
https://jwcooney.com/2012/09/1 ... alue/