You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VB.Net中通过FileStream从SQL Server读取VARBINARY并保存为PNG

解决方案:用OleDb读取SQL Server中的二进制图片并保存为PNG

一、读取并保存图片的代码(VB.NET + OleDb)

直接通过OleDb查询获取存储的二进制数据,再写入文件即可,无需依赖单独的T-SQL脚本:

Dim connection As New OleDbConnection(MyConnString)
Dim command As New OleDbCommand("SELECT Immagine FROM Prodotti WHERE Oggetto = 'Monitor'", connection)

Try
    connection.Open()
    ' 获取存储的二进制图片数据
    Dim imageBytes As Byte() = DirectCast(command.ExecuteScalar(), Byte())
    
    If imageBytes IsNot Nothing AndAlso imageBytes.Length > 0 Then
        ' 直接将字节数组写入文件,生成PNG
        File.WriteAllBytes("C:\Users\user\Desktop\Nuova cartella\recovered_monitor.png", imageBytes)
        
        ' 可选:通过MemoryStream验证图片有效性(避免存储时的无效数据)
        'Using ms As New MemoryStream(imageBytes)
        '    Using img As Image = Image.FromStream(ms)
        '        img.Save("C:\Users\user\Desktop\Nuova cartella\validated_monitor.png", Imaging.ImageFormat.Png)
        '    End Using
        'End Using
    End If
Finally
    connection.Close()
End Try

二、关键注意事项

  • 存储时的遗留问题:你之前用stream.GetBuffer()获取字节数组,这个方法会返回MemoryStream的整个内部缓冲区(包含未使用的空字节),可能导致存储的字节数组比实际PNG数据长。如果读取后生成的图片无法打开,建议重新存储时改用stream.ToArray()(仅返回实际的图片字节)。
  • 字段类型验证:确保Immagine字段是VARBINARY(MAX)类型,避免因长度限制导致图片数据被截断。

三、关于OleDb替代T-SQL的问题

完全可以用OleDb实现,不需要单独编写T-SQL脚本。OleDb本身就是.NET用于和SQL Server交互的数据提供程序,通过OleDbCommand执行查询、获取结果的过程,本质上就是在执行T-SQL语句,但所有操作都可以通过代码完成,和你存储数据时的逻辑一致,不需要手动在数据库工具中运行T-SQL。

内容的提问来源于stack exchange,提问作者grimoiredark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:15:30