web-dev-qa-db-fra.com

Différence avec Parameters.Add et Parameters.AddWithValue

Fondamentalement, Commands a Parameters et les paramètres ont des fonctions comme Add, AddWithValue, etc. Dans tous les didacticiels que j'ai vus, j'ai généralement remarqué qu'ils sont en utilisant Add au lieu de AddWithValue.

.Parameters.Add("@ID", SqlDbType.Int)

contre

.Parameters.AddWithValue("@ID", 1)

Y a-t-il une raison de NE PAS utiliser AddWithValue? Je préférerais l'utiliser sur

Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1

car cela me fait gagner du temps de codage. Alors, quel est le meilleur à utiliser? Lequel est sûr à utiliser? Améliore-t-il les performances?

29
John Woo

Avec la méthode Add(), vous pouvez restreindre l'entrée de l'utilisateur en spécifiant le type et la longueur des données - en particulier pour les colonnes varchar.

.Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName;

Dans le cas de la méthode AddWithValue () (conversion implicite de valeur), il envoie la valeur nvarchar à la base de données.

26
adatapost

Je crois qu'il y a aussi des inconvénients à utiliser AddWithValue qui affectent le plan d'excection du cache SQL, voir la section Longueur des paramètres ici

8
learnerplates

J'utiliserais AddWithValue pour les cas normaux. Et utilisez Add (nom, dbtype ... uniquement lorsque votre type de colonne est différent de la façon dont .net convertit le type CLR.

2
Remco Ros

L'utilisation de AddWithValue () ajoute un paramètre avec la longueur de la valeur actuelle. Si la longueur de la valeur de votre paramètre varie souvent, cela signifie qu'un nouveau plan est généré à chaque fois. Cela ralentit l'exécution de vos requêtes (temps supplémentaire pour l'analyse, la compilation) et entraîne également une charge de serveur plus élevée.

1
DNQ