Подтвердить что ты не робот

Что SqlDbType сопоставляется с varBinary (max)?

Что SqlDbType сопоставляется с varBinary (max)? SqlDbType.VarBinary говорит, что он ограничен 8K. Документация SQL Server говорит, что varbinary (max) может хранить aprrox. 2 Гб. Но SqlDbType.VarBinary говорит, что он ограничен 8K.

4b9b3361

Ответ 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.