SqlDbType.VarBinary med længden -1 svarer til VARBINARY(MAX), i det mindste i teorien. Men problemet er lidt mere komplekst, da der også er en type (ikke en enum-værdi), nemlig SqlTypes.SqlBytes
som kan bruges. Og der er SqlTypes.SqlFileStream
som også kan bruges til VARBINARY(MAX)
typer, når de har FILESTREAM
attribut.
Men problemet er, at ingen af disse opregninger eller typer dækker det egentlige problem med at arbejde med VARBINARY(MAX)
kolonner i ADO.Net:hukommelsesforbrug. Alle disse typer vil, når de bruges 'out-of-the-box', skabe kopier af den værdi, der er allokeret som et enkelt array i hukommelsen, hvilket i bedste fald ikke er ydeevne, men efterhånden som indholdet bliver større, bliver det helt umuligt at bruge, fordi allokeringsfejl . Jeg har et par artikler, der viser den korrekte måde at håndtere VARBINARY(MAX)
på værdier i ADO.Net ved hjælp af streaming semantik, der undgår oprettelse af in-memory kopier af hele indholdet:
- Download og upload billeder fra SQL Server via ASP.Net MVC
- FILESTREAM MVC:Download og upload billeder fra SQL Server