Как использовать свойство SqlParameter.Offset и ADO.NET для хранения двоичного файла в SQL Server 2012

В настоящее время я учусь хранить файлы без использования атрибута FILESTREAM в varchar(max) в SQL Server, поскольку мне не нужно хранить очень большие двоичные файлы. Несмотря на это, я хочу хранить двоичные данные небольшими порциями. Я обнаружил свойство SqlParameter.Offset. Вот некоторая информация об этом из MSDN:

"Свойство Offset используется для клиентской части двоичных и строковых данных. Например, чтобы вставить 10 МБ текста в столбец на сервере, пользователь может выполнить 10 параметризованных вставок фрагментов по 1 МБ, сдвинув значение Offset на каждой итерации по 1 МБ."

Похоже, это именно то, что мне нужно, но я не понимаю, как его использовать. Я создал очень простую таблицу с именем BinaryFilesTable (Id, FileData). Id - это первичный ключ, а FileData - varbinary(max). Вот мой код до сих пор.

public static void Main(string[] args)
    {
        var fileBytes = File.ReadAllBytes("../../image.jpg");

        const string connectionString = @"Server=.; Database=TestDb; Integrated Security=true";
        SqlConnection connection = new SqlConnection(connectionString);

        connection.Open();
        using (connection)
        {
            string commandText = "INSERT INTO BinaryFilesTable(FileData) VALUES (@binaryFileData)";

            SqlCommand command = new SqlCommand(commandText, connection);

            SqlParameter commandParameter = new SqlParameter();
            commandParameter.ParameterName = "@binaryFileData";
            commandParameter.Value = fileBytes;
            commandParameter.SqlDbType = SqlDbType.VarBinary;
            commandParameter.Size = -1; // VarBinary becomes VarBinary(max) if size is set to -1.
            //commandParameter.Offset = ??? How to use it ???

            command.Parameters.Add(commandParameter);

            command.ExecuteNonQuery();
        }
    }

С помощью этого кода мне удалось сохранить данные в таблице, но я не совсем уверен, как это работает. Насколько я понимаю, в настоящий момент двоичные данные хранятся одновременно, и именно поэтому я хочу выяснить, как использовать это свойство Offset. Я потратил несколько часов на поиск учебника, но безуспешно.

РЕДАКТИРОВАТЬ: Если я установлю какое-либо значение смещения, я получу следующее исключение:

System.ArgumentException: смещение и длина вышли за пределы массива или счетчика больше, чем количество элементов от индекса до конца исходной коллекции.

1 ответ

Offset свойство используется для клиентской части двоичных и строковых данных.

Например, чтобы вставить 10 МБ текста в столбец на сервере, пользователь может выполнить 10 параметризованных вставок фрагментов по 1 МБ, сдвинув значение Offset на каждой итерации на 1 МБ.

Смещение определяет количество байтов для двоичных типов и количество символов для строк. Количество строк не включает завершающий символ.

//Simple Use offset
parameter.Offset = 3;
Другие вопросы по тегам