如何从sqlserver下载大小为GB级别的文件

ottorz 2016-03-28 02:09:27
我用SqlDataReader dr = cmd.ExecuteReader();查询并获取文件内容,然后byte[] data = (byte[])dr[2];来把获取的内容转化为数组,就报内存溢出,不能下载文件了,应该是文件过大了没有足够的连续的内存空间去存放,那有什么办法解决呢?
...全文
211 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ottorz 2016-05-01
  • 打赏
  • 举报
回复
引用 2 楼 tcmakebest的回复:
一下子读太多内容确实不行,那就分块读取吧
DbDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);// 表明分块读取
try
{
    byte[] buff = new byte[100000]; // 缓存大小
    int oid = dr.GetOrdinal("filecontent");// 字段名
    if (dr.Read())
    {
        int len = buff.Length;
        long pos = 0; // 读取的位置
        do
        {
            len = (int)dr.GetBytes(oid, pos, buff, 0, buff.Length);
            if (len > 0)
            {
                pos += len;
                /// 输出 buff 中的前 len 个字节
            }
        } while (len == buff.Length);
    }
}
finally
{
    dr.Close();
}
知道了
nry19871012 2016-03-28
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
正常人就不会往数据库里放这么大的数据,保存个路径就行了,然后通过http下载
同意
tcmakebest 2016-03-28
  • 打赏
  • 举报
回复
一下子读太多内容确实不行,那就分块读取吧
DbDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);// 表明分块读取
try
{
    byte[] buff = new byte[100000]; // 缓存大小
    int oid = dr.GetOrdinal("filecontent");// 字段名
    if (dr.Read())
    {
        int len = buff.Length;
        long pos = 0; // 读取的位置
        do
        {
            len = (int)dr.GetBytes(oid, pos, buff, 0, buff.Length);
            if (len > 0)
            {
                pos += len;
                /// 输出 buff 中的前 len 个字节
            }
        } while (len == buff.Length);
    }
}
finally
{
    dr.Close();
}
Poopaye 2016-03-28
  • 打赏
  • 举报
回复
正常人就不会往数据库里放这么大的数据,保存个路径就行了,然后通过http下载

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧