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;
mrblah
la source

Réponses:

288

Dans ce cas, vous utilisez -1.

Michał Chaniewski
la source
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";
Sam Meshesha
la source
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";
Eric Draven
la source
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";
Igor Macedo
la source
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.

Alberto Tromba
la source