如何将流输入输出到VarBinary(MAX)列?(SQL Server)

3
我有一些需要序列化的数据。我需要使用ADO.NET(还使用Enterprise Library)在.Net 3.5下将其保存并从VarBinary列中还原。
我似乎只能找到并使用byte[]接口,这需要分配一个大数组来进行传输。
看起来ADONET不支持流用于这些列是不可能的。或者我错过了什么?
谢谢
1个回答

4

我一直在寻找相同的答案。我在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)来读取和写入该文件。

尽管存在相当大的开销,但是FileStream在文件变大(约10mb)后会变得更快。对于较小的文件,您可以将FileStream列视为具有更少开销的varbinary列。此CodeProject文章解释了详细信息:http://www.codeproject.com/KB/database/SqlFileStream.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接