SqlDbType.VarBinary с дължина -1 е еквивалент на VARBINARY(MAX), поне на теория. Но проблемът е малко по-сложен, тъй като има и тип (не enum стойност), а именно SqlTypes.SqlBytes
които могат да се използват. И има SqlTypes.SqlFileStream
който може да се използва и за VARBINARY(MAX)
типове, когато имат FILESTREAM
атрибут.
Но проблемът е, че нито едно от тези изброявания или типове не покрива истинския проблем с работата с VARBINARY(MAX)
колони в ADO.Net:консумация на памет. Всички тези типове, когато се използват „извън кутията“, ще създадат копия на стойността, разпределена като единичен масив в паметта, което в най-добрия случай е неефективно, но с нарастването на съдържанието става невъзможно да се използва, тъй като разпределението е неуспешно . Имам няколко статии, които показват правилния начин за работа с VARBINARY(MAX)
стойности в ADO.Net, използвайки семантика за поточно предаване, която избягва създаването на копия в паметта на цялото съдържание:
- Изтегляне и качване на изображения от SQL Server чрез ASP.Net MVC
- FILESTREAM MVC:Изтегляне и качване на изображения от SQL Server