mhi*_*eth 12 c# sql stream varbinary
我正在尝试使用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();
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢 - 任何帮助表示赞赏.
Rem*_*anu 21
有关该主题的文章,请参阅从SQL Server下载和上载映像,包括高效的流式语义.你必须使用一个SqlDataReader打开CommandBehavior.SequentialAccess:
SequentialAccess 为DataReader提供一种处理包含具有大二进制值的列的行的方法.SequentialAccess不是加载整行,而是使DataReader能够将数据作为流加载.然后,您可以使用GetBytes或GetChars方法指定用于启动读取操作的字节位置,以及用于返回数据的有限缓冲区大小.
链接的文章提供了用于创建由SqlDataReader支持的Stream的完整代码,您可以简单地使用byte [] chunked copy,如果您还没有.Net 4.0.Stream.CopyTo(HttpResponse.OutputStream)
这篇后续文章解释了如何使用FILESTREAM列有效地将大型VARBINARY数据流入和流出数据库.
| 归档时间: |
|
| 查看次数: |
21125 次 |
| 最近记录: |