在C#中从SQL Server流式传输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();
}
在此先感谢 - 任何帮助表示赞赏。
没有找到相关结果
已邀请:
1 个回复
殿虫
打开
: SequentialAccess提供了一种方法 DataReader来处理那些行 包含具有大二进制的列 值。而不是加载整个 行,SequentialAccess启用 DataReader将数据作为流加载。 然后,您可以使用GetBytes或 GetChars方法指定一个字节 开始读取操作的位置, 以及数据的有限缓冲区大小 被退回。 链接的文章提供了用于创建由SqlDataReader支持的Stream的完整代码,您可以简单地
,或者如果您还没有.Net 4.0,则使用byte [] chunked copy。 这篇后续文章解释了如何使用FILESTREAM列有效地将大型VARBINARY数据流入和流出数据库。