作者:ds87vdsa | 来源:互联网 | 2023-02-13 13:36
我试图从MS Access DB中获取图像.正确获取数据,但是当我尝试显示某些错误时显示.我显示图片的代码是,
...
byte[] photoBytes = (byte[])res[11];
var ms = new System.IO.MemoryStream(photoBytes);
image.Image = new System.Drawing.Bitmap(ms);
...
错误:附加信息:参数无效.
任何人都可以告诉我错误或错误概率在哪里?
我的功能是
public OleDbDataReader studentInfo(String adm_no)
{
OleDbConnection con = new OleDbConnection(ConnStr);
con.Open();
OleDbCommand command = new OleDbCommand("SELECT * FROM student_info WHERE adm_no = '"+adm_no+"'", con);
OleDbDataReader res = command.ExecuteReader();
return res;
}
RuDevel..
5
据我所知,OLE是野兽.如果您确切知道数据类型是什么,那么如果您检查它的二进制结构,则有一些机会.OLE是一个容器,所以它的IMO绝不仅仅是纯粹的内容.
我没有代码了,但我记得在不同类型的OLE(Excel,Word,Textfiles,图像......)的hexdump中钓鱼,最终成功率可能达到80%.如果那是因为我们决定支持的类型或者我对OLE内部结构的非常有限的了解,我就不能再说了.
我对调试的建议是在完全处理二进制数据之前确保你有原始位图数据:
我的方法是创建一个小对象(在本例中是一个位图),将其存储在DB中,获取它的BLOB并在那里查找已知模式.我记得我通过逆向工程找到了一些结构 - 比如搜索对象的字节大小 - 并且在数据开始时有一些稳定的偏移量.
但是,如果您碰巧知道 - 或者甚至更好 - 拥有 OLE对象的确切结构和实现并且能够处理它,我绝对相信您将设法存储它并将其作为位图打开.
祝好运!
1> RuDevel..:
据我所知,OLE是野兽.如果您确切知道数据类型是什么,那么如果您检查它的二进制结构,则有一些机会.OLE是一个容器,所以它的IMO绝不仅仅是纯粹的内容.
我没有代码了,但我记得在不同类型的OLE(Excel,Word,Textfiles,图像......)的hexdump中钓鱼,最终成功率可能达到80%.如果那是因为我们决定支持的类型或者我对OLE内部结构的非常有限的了解,我就不能再说了.
我对调试的建议是在完全处理二进制数据之前确保你有原始位图数据:
我的方法是创建一个小对象(在本例中是一个位图),将其存储在DB中,获取它的BLOB并在那里查找已知模式.我记得我通过逆向工程找到了一些结构 - 比如搜索对象的字节大小 - 并且在数据开始时有一些稳定的偏移量.
但是,如果您碰巧知道 - 或者甚至更好 - 拥有 OLE对象的确切结构和实现并且能够处理它,我绝对相信您将设法存储它并将其作为位图打开.
祝好运!