¿Qué SqlDbType asigna a varBinary(max)?

¿Qué SqlDbType asigna a varBinary(max)? SqlDbType.VarBinary dice que está limitado a 8K.SQL la documentación del servidor dice que varbinary(max) puede almacenar aprrox. 2GB. Pero SqlDbType.VarBinary dice que está limitado a 8K.

Respuestas:3 Respuestas 3
Tiempo:hace 11 años, 4 meses
Última modificación:hace 8 años, 3 meses

Solución

SqlDbType.VarBinary con longitud -1 es el equivalente de VARBINARY(MAX), al menos en teoría. Pero el problema es un poco más complejo, ya que también hay un tipo (no un valor de enumeración), a saber, SqlTypes.SqlBytes que se puede usar. Y existe SqlTypes.SqlFileStream que se puede usar también para tipos, cuando tienen el atributo. VARBINARY(MAX)FILESTREAM

Pero el problema es que ninguna de estas enumeraciones o tipos cubre el verdadero problema con el trabajo con columnas en ADO.Net: el consumo de memoria. Todos estos tipos, cuando se usan «listos para usar», crearán copias del valor asignado como una sola matriz en la memoria, que en el mejor de los casos no tiene rendimiento, pero a medida que el contenido se hace más grande se vuelve imposible de usar porque la asignación falla. Tengo un par de artículos que muestran la forma correcta de manejar los valores en ADO.Net utilizando la semántica de streaming que evita la creación de copias en memoria de todo el contenido:VARBINARY(MAX)VARBINARY(MAX)

Otras respuestas

Esto podría ayudar: http://msdn.microsoft.com/en-us/library/a1904w6t.aspx

Por feo que sea, SqlDbType.Image parece ser el camino a seguir. Parece que necesito actualizar mi ORM, ya que cualquier cosa superior a 8k lo rompería actualmente.

Deja un comentario