让Stream进出VarBinary(MAX)列? (SQL Server)

时间:2010-08-28 15:19:00

标签: ado.net stream varbinary

我有一些我正在序列化的数据。我需要使用.Net 3.5(不是4.0)下的ADO.NET(也使用Enterprise Library)从VarBinary列保存和恢复它。

我似乎能够找到并开始工作的唯一接口是使用byte []。这需要分配一个大型数组来进行传输。

ADO.NET似乎不支持这些列的Streams。或者我忽略了什么?

由于

1 个答案:

答案 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