SqlDbType.VarBinary s délkou -1 je ekvivalentem VARBINARY(MAX), alespoň teoreticky. Problém je ale trochu složitější, protože existuje také typ (nikoli hodnota enum), konkrétně SqlTypes.SqlBytes
které lze použít. A existuje SqlTypes.SqlFileStream
což lze použít také pro VARBINARY(MAX)
typů, pokud mají FILESTREAM
atribut.
Problém je ale v tom, že žádný z těchto výčtů nebo typů nepokrývá skutečný problém s prací s VARBINARY(MAX)
sloupce v ADO.Net:spotřeba paměti. Všechny tyto typy, když se použijí „out-of-the-box“, vytvoří kopie hodnoty přidělené jako jediné pole v paměti, které je v nejlepším případě nevýkonné, ale jak se obsah zvětšuje, není možné jej použít, protože alokace selže. . Mám několik článků, které ukazují správný způsob, jak zacházet s VARBINARY(MAX)
hodnoty v ADO.Net pomocí sémantiky streamování, která zabraňuje vytváření kopií celého obsahu v paměti:
- Stahování a nahrávání obrázků ze serveru SQL pomocí ASP.Net MVC
- FILESTREAM MVC:Stahování a nahrávání obrázků ze serveru SQL