¿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;

Respuestas:


288

En este caso usas -1.


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";

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";

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";

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.