Ответ 1
SqlDbType.VarBinary с длиной -1 является эквивалентом VARBINARY (MAX), по крайней мере теоретически. Но проблема немного сложнее, так как существует также тип (а не значение перечисления), а именно SqlTypes.SqlBytes
, который можно использовать. И есть SqlTypes.SqlFileStream
, который также может использоваться для типов VARBINARY(MAX)
, если у них есть атрибут FILESTREAM
.
Но проблема в том, что ни одна из этих перечислений или типов не охватывает реальную проблему при работе с столбцами VARBINARY(MAX)
в ADO.Net: потребление памяти. Все эти типы при использовании "из коробки" создадут копии значения, выделенного как один массив в памяти, который в лучшем случае неэффективен, но по мере того, как контент становится больше, становится недоступным для использования, потому что неудачи распределения, У меня есть несколько статей, которые показывают правильный способ обработки значений VARBINARY(MAX)
в ADO.Net с использованием семантики потоковой передачи, которые не позволяют создавать копии в памяти всего содержимого: