Foxtable(狐表)用户栏目专家坐堂 → 从二进制列提取图片保存,提示内存溢出


  共有1920人关注过本帖树形打印复制链接

主题:从二进制列提取图片保存,提示内存溢出

帅哥哟,离线,有人找我吗?
kao_go
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
从二进制列提取图片保存,提示内存溢出  发帖心情 Post By:2023/5/17 8:53:00 [显示全部帖子]

以下代码引发类型为“System.OutOfMemoryException”的异常。


Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "s elect style_id,image_1 from s_style" 
Dim dt As DataTable = cmd.ExecuteReader
Dim src As String
If dt.DataRows.Count > 0 Then
    
    For Each dr As DataRow In dt.DataRows
        If dr.Isnull("image_1") = False Then
            Dim stream As System.IO.Stream 
            Dim bmp As System.Drawing.Bitmap
            Dim imagebytes As Byte() = dr("image_1")
            Stream = New System.IO.MemoryStream(imagebytes)
            
            bmp = New System.Drawing.Bitmap(stream)
            bmp.save("c:\desk\image_1\" + dr("style_id") + ".jpg")
            
            
           
        End If
    Next 
End If

 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 9:10:00 [显示全部帖子]

谢谢甜版
试了,还是提示内存溢出,有办法释放内存吗?
或者替他方式提取图片来保存

 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 9:22:00 [显示全部帖子]

SQlLoadImage也可以用save保存到本地吗?

 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 10:31:00 [显示全部帖子]

甜版,使用以下代码,会提示错误
src = "c:\desk\aa\" + dr("style_id") + ".jpg"
            Dim img As Image
            img = dr.SQLLoadImage("image_1")

---------------------------
提示
---------------------------
未将对象引用设置到对象的实例。
---------------------------
确定   
---------------------------


 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 10:43:00 [显示全部帖子]

抱歉
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "s  elect top 1 style_id,image_1 from s_style where style_id like '%19s%' and image_1 is not null" 
Dim dt As DataTable = cmd.ExecuteReader
Dim src As String
If dt.DataRows.Count > 0 Then
    For Each dr As DataRow In dt.DataRows
        If dr.Isnull("image_1") = False Then
            src = "c:\desk\aa\" + dr("style_id") + ".jpg"
            Dim img As Image
            img = dr.SQLLoadImage("image_1")
            MessageBox.Show(src)    ‘这个显示前提示错误【未将对象引用设置到对象的实例。
          '  img.Save(src)
           ' Dim imagebytes As Byte() = dr("image_1")
           ' Using stream As System.IO.Stream = New System.IO.MemoryStream(imagebytes)
           '     Dim bmp As System.Drawing.Bitmap = New System.Drawing.Bitmap(stream)
           '     bmp.save(src) 
           '     bmp.Dispose
           '     stream.Close
           '     stream.Dispose
           ' End Using
        End If
    Next 
End If

 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 10:56:00 [显示全部帖子]

好的,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 12:58:00 [显示全部帖子]

00
[此贴子已经被作者于2023/5/17 13:37:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 13:44:00 [显示全部帖子]

感谢甜版,确实是路径错了
另外下面这样,也可以快速读取外部表了
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "s elect  style_id from s_style where style_id like '%19s%' and image_1 is not null" 
Dim dt As DataTable = cmd.ExecuteReader
If dt.DataRows.Count > 0 Then
    For Each dr As DataRow In dt.DataRows
        Dim src As String
        src = "c:\desk\img1\" + dr("style_id") + ".jpg" '文件路径一定要存在
        Dim cmd1 As New SQLCommand
        cmd1.C
        cmd1.CommandText = CExp("s elect image_1 as img1 from s_style where style_id='{0}'", dr("style_id")) 
        Dim dt1 As DataTable = cmd1.ExecuteReader
        Dim dr1 As DataRow = dt1.DataRows(0)
        Dim imagebytes As Byte() = dr1("img1")
        
        Using stream As System.IO.Stream = New System.IO.MemoryStream(imagebytes)
            Dim bmp As System.Drawing.Bitmap = New System.Drawing.Bitmap(stream)
            bmp.save(src) 
            bmp.Dispose
            stream.Close
            stream.Dispose
        End Using
    Next 
End If


 回到顶部
帅哥哟,离线,有人找我吗?
kao_go
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:562 积分:4845 威望:0 精华:0 注册:2014/4/29 14:32:00
  发帖心情 Post By:2023/5/17 13:58:00 [显示全部帖子]

好的,谢谢!

 回到顶部