Что SqlDbType сопоставляется с varBinary (max)? SqlDbType.VarBinary говорит, что он ограничен 8K. Документация SQL Server говорит, что varbinary (max) может хранить aprrox. 2 Гб. Но SqlDbType.VarBinary говорит, что он ограничен 8K.
Что SqlDbType сопоставляется с varBinary (max)?
Ответ 1
SqlDbType.VarBinary с длиной -1 является эквивалентом VARBINARY (MAX), по крайней мере теоретически. Но проблема немного сложнее, так как существует также тип (а не значение перечисления), а именно SqlTypes.SqlBytes
, который можно использовать. И есть SqlTypes.SqlFileStream
, который также может использоваться для типов VARBINARY(MAX)
, если у них есть атрибут FILESTREAM
.
Но проблема в том, что ни одна из этих перечислений или типов не охватывает реальную проблему при работе с столбцами VARBINARY(MAX)
в ADO.Net: потребление памяти. Все эти типы при использовании "из коробки" создадут копии значения, выделенного как один массив в памяти, который в лучшем случае неэффективен, но по мере того, как контент становится больше, становится недоступным для использования, потому что неудачи распределения, У меня есть несколько статей, которые показывают правильный способ обработки значений VARBINARY(MAX)
в ADO.Net с использованием семантики потоковой передачи, которые не позволяют создавать копии в памяти всего содержимого:
Ответ 2
Попробуйте следующее:
SqlParameter blobParam = new SqlParameter("@blob", SqlDbType.VarBinary, buffer.Length);
blobParam.Value = buffer;
cmd.Parameters.Add(blobParam);
Посмотрите, работает ли это
Ответ 3
Это может помочь: http://msdn.microsoft.com/en-us/library/a1904w6t.aspx
Как ни безошибочно, SqlDbType.Image, похоже, является способом выхода. Похоже, мне нужно обновить свой ORM, так как в этом случае сломал бы что-нибудь более 8k.