Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que SqlDbType mapeia para varBinary (max)?


SqlDbType.VarBinary com comprimento -1 é o equivalente a VARBINARY(MAX), pelo menos em teoria. Mas o problema é um pouco mais complexo, pois também existe um tipo (não um valor enum), ou seja, SqlTypes.SqlBytes que pode ser usado. E há SqlTypes.SqlFileStream que pode ser usado também para VARBINARY(MAX) tipos, quando eles têm o FILESTREAM atributo.

Mas o problema é que nenhum desses enums ou tipos cobrem o problema real de trabalhar com VARBINARY(MAX) colunas no ADO.Net:consumo de memória. Todos esses tipos, quando usados ​​'out-of-the-box', criarão cópias do valor alocado como um único array na memória, o que na melhor das hipóteses não tem desempenho, mas à medida que o conteúdo aumenta, torna-se impossível de usar devido a falhas de alocação . Eu tenho alguns artigos que mostram a maneira correta de lidar com VARBINARY(MAX) valores no ADO.Net usando semântica de streaming que evita a criação de cópias na memória de todo o conteúdo:
  • Baixe e carregue imagens do SQL Server via ASP.Net MVC
  • FILESTREAM MVC:baixar e carregar imagens do SQL Server