我遇到了一个我正在工作的C#项目的问题。我得到一个对象数组,其中包含数据库行中所有选定的项目,其函数为:
public static object[] getResultSet (string statement)
{
object[] resultArray=null;
OleDbConnection con = getConnection();
OleDbCommand command = new OleDbCommand(statement, con);
try
{
con.Open();
OleDbDataReader reader = command.ExecuteReader();
if (reader.Read())
{
resultArray = new object[reader.FieldCount];
reader.GetValues(resultArray);
}
reader.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.ToString(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
finally
{
con.Close();
}
return resultArray;
}
我有这个对象数组,我已经存储了所有结果:
object[] obj = getResultSet("SELECT * FROM Rooms WHERE ID=1");
我当然知道对象obj [2]在我的数据库中是一个BLOB,因为调试器为我的对象显示超过3mil的字节。但是当我尝试从对象转换bytes数组时,我得知我没有处理异常:
"未处理的类型' System.ArgumentException'发生在System.Drawing.dll
中附加信息:参数无效。"
这是我用来将字节数组转换为图像的函数:
public static Image imageFromByteArray(byte[] bytearray)
{
Image img;
ImageConverter imgCon = new ImageConverter();
img=(Image)imgCon.ConvertFrom(bytearray);
return img;
}
我试着打电话
imageFromByteArray((byte[])obj[2]);
但它没有用,即使是另一个将对象转换为字节数组的函数:
public static byte[] objectToByteArray(object obj)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
return ms.ToArray();
}
答案 0 :(得分:0)
我找到了解决方案。以前,我已经手动将图像添加到数据库中,这就是为什么它表现得如此奇怪。 为了被我的程序识别,需要以编程方式添加所有图像。