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