SqlDbType.VarBinary met lengte -1 is het equivalent van VARBINARY(MAX), althans in theorie. Maar het probleem is iets complexer, omdat er ook een type is (geen enum-waarde), namelijk SqlTypes.SqlBytes
die kan worden gebruikt. En er is SqlTypes.SqlFileStream
die ook kan worden gebruikt voor VARBINARY(MAX)
typen, wanneer ze de FILESTREAM
. hebben attribuut.
Maar het probleem is dat geen van deze opsommingen of typen het echte probleem dekt met het werken met VARBINARY(MAX)
kolommen in ADO.Net:geheugenverbruik. Al deze typen zullen, wanneer ze 'out-of-the-box' worden gebruikt, kopieën maken van de waarde die is toegewezen als een enkele array in het geheugen, wat op zijn best niet presteert, maar naarmate de inhoud groter wordt, wordt het echt onmogelijk om te gebruiken omdat toewijzingsfouten . Ik heb een aantal artikelen die de juiste manier laten zien om VARBINARY(MAX)
te behandelen waarden in ADO.Net met behulp van streaming-semantiek die het maken van in-memory kopieën van de volledige inhoud voorkomt:
- Download en upload afbeeldingen van SQL Server via ASP.Net MVC
- FILESTREAM MVC:afbeeldingen downloaden en uploaden van SQL Server