C#错误将bytearray从数据库转换为图像

时间:2016-12-09 21:13:41

标签: c#

我遇到了一个我正在工作的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();
        }

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。以前,我已经手动将图像添加到数据库中,这就是为什么它表现得如此奇怪。 为了被我的程序识别,需要以编程方式添加所有图像。