Как использовать свойство 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;