SqlDbType.VarBinary o długości -1 jest odpowiednikiem VARBINARY(MAX), przynajmniej w teorii. Ale problem jest nieco bardziej złożony, ponieważ istnieje również typ (nie wartość wyliczenia), a mianowicie SqlTypes.SqlBytes
które można wykorzystać. I jest SqlTypes.SqlFileStream
które mogą być używane również dla VARBINARY(MAX)
typy, gdy mają FILESTREAM
atrybut.
Ale problem polega na tym, że żadne z tych wyliczeń ani typów nie obejmuje prawdziwego problemu z pracą z VARBINARY(MAX)
kolumny w ADO.Net:zużycie pamięci. Wszystkie te typy, gdy są używane „po wyjęciu z pudełka”, utworzą kopie wartości przydzielonej jako pojedyncza tablica w pamięci, co jest w najlepszym razie nieefektywne, ale gdy zawartość staje się większa, staje się niemożliwa do użycia z powodu błędów alokacji . Mam kilka artykułów, które pokazują właściwy sposób obsługi VARBINARY(MAX)
wartości w ADO.Net przy użyciu semantyki strumieniowej, która pozwala uniknąć tworzenia kopii całej zawartości w pamięci:
- Pobieraj i przesyłaj obrazy z SQL Server za pośrednictwem ASP.Net MVC
- FILESTREAM MVC:Pobieranie i przesyłanie obrazów z serwera SQL