SqlDbType.VarBinary mit der Länge -1 ist das Äquivalent zu VARBINARY(MAX), zumindest theoretisch. Das Problem ist jedoch etwas komplexer, da es auch einen Typ (nicht einen Enum-Wert) gibt, nämlich SqlTypes.SqlBytes
die verwendet werden können. Und es gibt SqlTypes.SqlFileStream
die auch verwendet werden können für VARBINARY(MAX)
Typen, wenn sie die FILESTREAM
Attribut.
Das Problem ist jedoch, dass keine dieser Enums oder Typen das eigentliche Problem bei der Arbeit mit VARBINARY(MAX)
Spalten in ADO.Net: Speicherverbrauch. Alle diese Typen, wenn sie "out-of-the-box" verwendet werden, erstellen Kopien des Wertes, die als einzelnes Array im Speicher zugewiesen werden, was bestenfalls unperformant ist, aber wenn der Inhalt größer wird, wird die Verwendung aufgrund von Zuweisungsfehlern schlichtweg unmöglich. Ich habe einige Artikel, die zeigen, wie man richtig damit umgeht VARBINARY(MAX)
Werte in ADO.Net unter Verwendung einer Streaming-Semantik, die die Erstellung von In-Memory-Kopien des gesamten Inhalts vermeidet: