gpt4 book ai didi

ado.net - 让 Stream 进出 VarBinary(MAX) 列? (SQL服务器)

转载 作者:行者123 更新时间:2023-12-01 11:58:48 25 4
gpt4 key购买 nike

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

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

ADO.NET 似乎不可能不支持这些列的流。还是我忽略了什么?

谢谢

最佳答案

我一直在寻找相同的答案。我在 EggHeadCafe 上找到了一篇文章,它提供了使用这样的命令进行读取的解决方案:
SELECT substring(DataColumn, @offset, @length) FROM BlobTable WHERE ID = @key

像这样的命令用于写入:
更新 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

关于ado.net - 让 Stream 进出 VarBinary(MAX) 列? (SQL服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3591263/

25 4 0