如何使用SqlParameter.偏移属性和ADO.. NET在SQL Server 2012中存储二进制文件
本文关键字:Server SQL 2012 二进制文件 存储 NET ADO SqlParameter 何使用 属性 | 更新日期: 2023-09-27 18:03:49
我目前正在学习如何在SQL Server中不使用varchar(max)上的FILESTREAM属性存储文件,因为我不需要存储非常大的二进制文件。尽管如此,我还是想用小块来存储二进制数据。我找到的是SqlParameter。抵消房地产。以下是来自MSDN的一些信息:
" Offset属性用于客户端二进制和字符串数据的分块。例如,为了在服务器上的列中插入10MB的文本,用户可能会执行10个1MB块的参数化插入,在每次迭代中将Offset的值移动1MB。"
听起来这正是我所需要的,但我不知道如何使用它。我创建了一个非常简单的名为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();
}
}
使用此代码,我设法将数据存储在表中,但我不完全确定它是如何工作的。正如我所理解的,目前二进制数据是一次性存储的,这就是我想弄清楚如何使用这个偏移属性的原因。我花了几个小时寻找教程,但没有成功。
编辑:如果我为偏移量设置了一些值,我会得到以下异常:
系统。ArgumentException:偏移量和长度超出数组的范围,或者计数大于从索引到源集合结束的元素数量。
Offset
属性用于二进制和字符串数据的客户端分块。
例如,为了在服务器上的一个列中插入10MB的文本,用户可能会执行10次参数化的1MB块插入,每次迭代将Offset的值移动1MB。
Offset指定二进制类型的字节数和字符串类型的字符数。字符串的计数不包括结束字符。
//Simple Use offset
parameter.Offset = 3;