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