从 .NET 中的 MS Access 数据库读取 OLE 图像时出现 ArgumentException
Posted
技术标签:
【中文标题】从 .NET 中的 MS Access 数据库读取 OLE 图像时出现 ArgumentException【英文标题】:ArgumentException on reading an OLE image from an MS Access database in .NET 【发布时间】:2015-09-10 17:23:22 【问题描述】:我正在尝试从 Access 数据库中读取图像。它读取字节,但当我尝试使用Image.FromStream
时,它给出了未处理的 System.ArgumentException。
这是我的代码:
private Image ReadImageFromDB()
Image fetchedImg;
if (rownumber >= 0)
byte[] fetchedimgbytes = (byte[])localDataTable.Rows[5]["Object"];
MemoryStream stream = new MemoryStream(fetchedimgbytes);
fetchedImg= Image.FromStream(stream);
return fetchedImg;
else
MessageBox.Show("no image");
return null;
【问题讨论】:
您如何与我们分享例外情况。它肯定会帮助我们调试。现在它可以是任何东西,Rows[5]
可能不存在。 fetchedimgbytes
可能为空,stream
可能不代表图像。你并没有真正让我们继续前进。
您在哪一行得到未处理的异常?你用什么连接到数据库?你如何填充结果集?
System.Drawing.dll中发生的异常类型为'System.ArgumentException'
如果它是位图图像,我如何从数据库中读取它
MSDN 说,当“流没有有效的图像格式”或“流”为空时,会引发 FromStream 方法的 ArgumentException。我认为这是第一种选择。您如何将图像保存到数据库中?
【参考方案1】:
我下载了您的示例文件,当我在 Access 中打开表格时,[Img] 列中的项目显示“位图图像”,而不是“长二进制数据”。
因此,该行中的 [Img] 项是“OLE 包装”对象,而不是原始位图图像。如果您提取该列的二进制内容(就像您从 C# 应用程序中所做的那样),它将包含原始二进制图像数据周围的 OLE 包装器,并且不会是该格式的有效位图图像。
您需要从二进制数据中删除 OLE 标头信息,然后才能将其识别为有效图像。有关如何执行此操作的信息,请参阅此问题:
Convert Access image OLE Object into raw image byte array in C#
【讨论】:
能否请您点击此链接:***.com/questions/32528427/…以上是关于从 .NET 中的 MS Access 数据库读取 OLE 图像时出现 ArgumentException的主要内容,如果未能解决你的问题,请参考以下文章
从 MS Access 批量导入并插入 Sql Server [关闭]
从 C# WPF 应用程序中读取 MS Access 数据库中的图像 [重复]
如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?
初始化使用 .NET 从 MS Access 数据库导入的 ILOG OPL 中的元组