2010-08-28 70 views
1

我有一些数据,我正在序列化。我需要在.Net 3.5(不是4.0)下使用ADO.NET(也使用企业库)从VarBinary列中保存和恢复。让Stream进出VarBinary(MAX)列? (SQL Server)

我似乎能够找到和工作的唯一接口是使用一个字节[]。这需要分配一个大阵列来完成传输。

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

谢谢

回答

3

我一直在寻找相同的答案。我发现在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数据类型。一旦插入了一条记录(sans binary data),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

相关问题