我有一些我正在序列化的数据。我需要使用.Net 3.5(不是4.0)下的ADO.NET(也使用Enterprise Library)从VarBinary列保存和恢复它。
我似乎能够找到并开始工作的唯一接口是使用byte []。这需要分配一个大型数组来进行传输。
ADO.NET似乎不支持这些列的Streams。或者我忽略了什么?
由于
答案 0 :(得分:5)
我一直在寻找相同的答案。我在EggHeadCafe上发现了一篇文章,它提供了一个解决方案,使用这样的命令进行读取:
SELECT substring(DataColumn, @offset, @length) FROM BlobTable WHERE ID = @key
这样的命令写道:
UPDATE BlobTable SET DataColumn.write(@buffer, @offset, @length) WHERE ID = @key
您可以在此处找到完整的解决方案(使用自定义流类):http://www.eggheadcafe.com/software/aspnet/29988841/how-to-readwrite-chunked-to-varbinarymax-in-c.aspx。
但出于我的目的,我想我将使用自Sql Server 2008
起可用的FileStream数据类型。一旦插入记录(没有二进制数据),Sql Server就会在磁盘上分配一个物理文件来读取和写入记录数据。然后运行命令以获取路径名称:
SELECT DataColumn.PathName() FROM BloblTable WHERE [Id] = @key
完成后,您可以使用传统的流类(例如System.IO.FileStream
)来读取和写入文件。
存在相当大的开销,但随着文件变大(大约10mb),FileStream变得更快。对于较小的文件,可以将FileStream列视为varbinary列,而且开销较小。 CodeProject上的这篇文章解释了详细信息:http://www.codeproject.com/KB/database/SqlFileStream.aspx