sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué SqlDbType se asigna a varBinary (max)?

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

Pero el problema es que ninguna de estas enumeraciones o tipos cubre el problema real de trabajar con VARBINARY(MAX) columnas en ADO.Net: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, lo que en el mejor de los casos no funciona, pero a medida que el contenido aumenta, se vuelve imposible de usar debido a fallas en la asignación. . Tengo un par de artículos que muestran la forma correcta de manejar VARBINARY(MAX) valores en ADO.Net utilizando semántica de transmisión que evita la creación de copias en memoria de todo el contenido:

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