В этом проекте есть класс, обертывающий ADO.NET для общего доступа к данным, например ExecuteDataReader
, ExecuteScalar
и т. д.
При использовании этих методов для вызова хранимой процедуры он позволяет передать Dictionary<string, string>
параметров (строковый ключ, строковое значение), которые затем добавляются к SqlCommand
объекту как SqlParameter
.
Есть случай, когда нам нужно сохранить документ в базе данных. Документ представляет собой byte[]
, а соответствующий столбец в базе данных — varbinary(MAX)
.
Мы искали решение, но все, что доступно, — это примеры использования SqlDbType.Varbinary
, что не подходит в данной ситуации.
Нашей последней попыткой было преобразовать byte[]
в двоичную строку, передать ее в хранимую процедуру как nvarchar(max)
, а затем использовать CONVERT(varbinary(max), @theFileBinaryString)
при сохранении в таблице Document
, однако при этом сохраняется поврежденный файл.
C#
byte[] pDocumentBytes = ...;
string documentAsBinary = "0x" + BitConverter.ToString(pDocumentBytes).Replace("-", "");
SQL
@DocumentContentAsBinary nvarchar(max) -- This is "documentAsBinary" from C# above
DECLARE @DocumentContentVarbinary varbinary(max);
SET @DocumentContentVarbinary = CONVERT(varbinary(max), @DocumentContentAsBinary);