在C#中从SQL Server流式传输VARBINARY数据

在C#中从SQL Server流式传输VARBINARY数据,第1张

概述我正在尝试使用ASP.Net为数据库中存储在VARBINARY(MAX)字段中的图像数据提供服务.现在,代码正在填充数据表,然后将字节数组拉出DataRow,并将字节数组推入响应.我想知道是否有一种方法来将数据从SQL Server更多或更少地传输到响应中,而不必围绕这些巨大的字节数组进行编组(因为图像很大,它们导致OutOfMemoryExceptions).是否有类/机制? 当前代码看起来或多 我正在尝试使用ASP.Net为数据库中存储在VARBINARY(MAX)字段中的图像数据提供服务.现在,代码正在填充数据表,然后将字节数组拉出DaTarow,并将字节数组推入响应.我想知道是否有一种方法来将数据从sql Server更多或更少地传输到响应中,而不必围绕这些巨大的字节数组进行编组(因为图像很大,它们导致OutOfMemoryExceptions).是否有类/机制?

当前代码看起来或多或少如下:

Datatable table = new Datatable();sqlDataAdapter adapter = new sqlDataAdapter(commandText,connectionString);adapter.Fill(table);DaTarow row = table.Rows[0];byte[] imageData = row[0] as byte[];if(imageData != null){  Response.Clear();  Response.BinaryWrite(imageData);  Response.End();}

感谢提前 – 任何帮助是赞赏.

解决方法 请参阅 Download and Upload Images from SQL Server有关该主题的文章,包括高效的流语义.您必须使用 SqlDataReader打开的 SqlDataReader

SequentialAccess ProvIDes a way for
the DataReader to handle rows that
contain columns with large binary
values. Rather than loading the entire
row,SequentialAccess enables the
DataReader to load data as a stream.
You can then use the GetBytes or
GetChars method to specify a byte
location to start the read operation,
and a limited buffer size for the data
being returned.

链接的文章提供了用于创建由sqlDataReader支持的流的完整代码,您可以简单地使用Stream.CopyTo(HttpResponse.OutputStream),或者如果您还没有.Net 4.0,则使用byte []块复制.

该后续文章解释了how to use a FILESTREAM column for efficient streaming of large VARBINARY data进出数据库.

总结

以上是内存溢出为你收集整理的在C#中从SQL Server流式传输VARBINARY数据全部内容,希望文章能够帮你解决在C#中从SQL Server流式传输VARBINARY数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存