Quelle taille utilisez-vous pour varchar (MAX) dans votre déclaration de paramètre?


190

Je règle normalement la taille de ma colonne lors de la création d'un paramètre dans ADO.NET

Mais quelle taille dois-je utiliser si la colonne est VARCHAR(MAX)?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

Réponses:


288

Dans ce cas, vous utilisez -1.


5
y a-t-il un inconvénient en termes de performances à définir toutes les longueurs de paramètre à -1, donc je n'ai pas à maintenir une liste de correspondance de base de données?
Andrew Bullock

1
Varchar (max) est traité de la même manière que varchar (8000) pour les valeurs inférieures à 8000 octets. Pour des valeurs plus grandes, le champ est traité comme un champ "texte" (alias un "CLOB"). Cela peut affecter l'optimisation du plan de requête et l'efficacité de la récupération des lignes avec des valeurs plus élevées dans cette colonne, car les données sont stockées «hors ligne» nécessitant une recherche supplémentaire.
KeithS

Utilisez nvarchar (max) dans sql et définissez la longueur -1 avec SqlDbType.NVarchar dans c #
Romil Kumar Jain

Sans la réponse de Sam Meshesha ci-dessous - j'aurais manqué votre réponse. Votre réponse peut obtenir plus de votes si vous mettez un exemple de ligne de code formaté sous forme de code.
qxotk le

51

Pour ceux d'entre nous qui n'ont pas vu -1 de Michal Chaniewski, la ligne complète de code:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

2

La taille maximale de SqlDbType.VarChar est 2147483647.

Si vous utilisiez une connexion oledb générique au lieu de sql, j'ai trouvé ici qu'il existe également un type de données LongVarChar. Sa taille maximale est 2147483647.

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

1

Vous n'avez pas besoin de passer le paramètre size, déclarez simplement Varcharqu'il comprend déjà que c'est MAX comme:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

1
Cela peut avoir des effets négatifs sur votre serveur SQL en raison de la façon dont le plan d'exécution est calculé.
yaakov

J'ai trouvé que ce n'était pas le cas lors de l'utilisation d'un paramètre de sortie. Cela entraîne l'erreur suivante «Exception: String [2]: la propriété Size a une taille non valide de 0.» Pour résoudre ce problème, utilisez Size = -1 voir stackoverflow.com/questions/21087950/…
Michael K

1

Si vous faites quelque chose comme ça:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

la taille sera extraite de "un gros texte".

Cela peut être problématique lorsqu'il s'agit d'un paramètre de sortie, vous ne récupérez plus de caractères que vous mettez en entrée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.