我似乎只能找到并使用byte[]接口,这需要分配一个大数组来进行传输。
看起来ADONET不支持流用于这些列是不可能的。或者我错过了什么?
谢谢
我一直在寻找相同的答案。我在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