¿Qué SqlDbType asigna a varBinary (max)?

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

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 enum), es decir, SqlTypes.SqlBytes que se puede usar. Y hay SqlTypes.SqlFileStream que se puede usar también para VARBINARY(MAX) , cuando tienen el atributo FILESTREAM .

Pero el problema es que ninguna de estas enumeraciones o tipos cubre el problema real con el trabajo con VARBINARY(MAX) en ADO.Net: consumo de memoria. Todos estos tipos, cuando se usen ‘out-of-the-box’, crearán copias del valor asignado como una única matriz en la memoria, que en el mejor de los casos no es eficiente, pero a medida que el contenido se hace más grande se vuelve imposible de usar debido a fallas de asignación . Tengo un par de artículos que muestran la forma correcta de manejar VARBINARY(MAX) en ADO.Net utilizando la semántica de transmisión que evita la creación de copias en memoria de todo el contenido:

  • Descargar y cargar imágenes de SQL Server a través de ASP.Net MVC
  • FILESTREAM MVC: descarga y carga imágenes de SQL Server

Prueba esto:

 SqlParameter blobParam = new SqlParameter("@blob", SqlDbType.VarBinary, buffer.Length); blobParam.Value = buffer; cmd.Parameters.Add(blobParam); 

Vea si eso funciona

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

Tan feo como podría ser, SqlDbType.Image parece ser el camino a seguir. Parece que necesito actualizar mi ORM, ya que cualquier cosa de más de 8k lo rompería actualmente.