¿Qué tamaño utiliza para varchar (MAX) en su declaración de parámetros?

190

Normalmente establezco el tamaño de mi columna al crear un parámetro en ADO.NET

¿Pero qué tamaño uso si la columna es VARCHAR(MAX)?

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

Respuestas:

288

En este caso usas -1.

Michał Chaniewski
fuente
55
¿hay algún inconveniente en el rendimiento para establecer todas las longitudes de los parámetros en -1, por lo que no tengo que mantener una lista de coincidencia de db?
Andrew Bullock
1
Varchar (max) se trata de manera idéntica a varchar (8000) para valores inferiores a 8000 bytes. Para valores mayores, el campo se trata como un campo de "texto" (también conocido como "CLOB"). Esto puede afectar la optimización del plan de consulta y la eficiencia de recuperar filas con valores más grandes en esta columna, ya que los datos se almacenan "fuera de fila" y requieren una búsqueda adicional.
KeithS
Use nvarchar (max) en sql y defina la longitud -1 con SqlDbType.NVarchar en c #
Romil Kumar Jain
Si no fuera por la respuesta de Sam Meshesha a continuación, me habría perdido tu respuesta. Su respuesta podría obtener más votos si coloca una línea de código de muestra formateada como código.
qxotk
51

Para aquellos de nosotros que no vimos -1 por Michal Chaniewski, la línea completa de código:

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

El tamaño máximo de SqlDbType.VarChar es 2147483647.

Si usaría una conexión oledb genérica en lugar de sql, descubrí que aquí también hay un tipo de datos LongVarChar. Su tamaño máximo es 2147483647.

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

No necesita pasar el parámetro de tamaño, solo declare que Varcharya entiende que es MAX como:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
Igor Macedo
fuente
1
Esto puede tener efectos negativos en su servidor SQL debido a cómo se calcula el Plan de ejecución.
Yaakov
Encontré que este no es el caso cuando se usa un parámetro de salida. Da como resultado el siguiente error `Excepción: Cadena [2]: la propiedad Size tiene un tamaño no válido de 0.` Para solucionar esto, use Size = -1, consulte stackoverflow.com/questions/21087950/…
Michael K
1

Si haces algo como esto:

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

el tamaño se tomará de "algún texto grande". Longitud

Esto puede ser problemático cuando se trata de un parámetro de salida, no obtiene más caracteres de los que ingresa como entrada.

Alberto Tromba
fuente