从mysql保存和检索图像

时间:2014-04-16 04:22:03

标签: c# mysql odbc

在C#中,我正在尝试保存并加载图像。我将它保存到一个mysql数据库(类型为longblob)并尝试将其加载回图片框。我一直遇到的问题是错误“参数无效”,请参阅下面的代码

        ConnectionClass Sqlconnection = new ConnectionClass();
        Sqlconnection.ConnectionOpen();

        OdbcCommand cmd = new OdbcCommand("Insert into pictest(pic) values('"+ Encoding.Unicode.GetBytes(richTextBox1.Rtf) + "')", Sqlconnection.connection);

        int num = cmd.ExecuteNonQuery();

        MessageBox.Show(num + " Rows inserted ");

        Sqlconnection.ConnectionClose();

        OdbcDataReader rd = null;

        try
        {
            Sqlconnection.ConnectionOpen();

            string query = "select * from pictest where id = 1";

            cmd = new OdbcCommand(query, Sqlconnection.connection);

            rd = cmd.ExecuteReader();

            if (rd.Read())
            {
                byte[] bytes = (byte[])rd[1];

                ImageConverter converter = new ImageConverter();
                pictureBox1.Image = Image.FromStream(new MemoryStream(bytes)); <--Parameter is not valid
                pictureBox1.Refresh();

                pictureBox1.Image = Encoding.Unicode.GetString(bytes);

            }

            Sqlconnection.ConnectionClose();
            rd.Close();
        }

        catch (Exception asd)
        {
            MessageBox.Show("Problem " + asd.Message);

            Sqlconnection.ConnectionClose();

            if (rd != null)
            {
                rd.Close();
            }
        }

究竟是什么问题?图像是否未正确保存?它应该是因为它可以节省成为长斑。 System.Byte []

的图像记录

2 个答案:

答案 0 :(得分:0)

在尝试将第一个字段转换为OdbcDataReader之前,您应该能够(通过调试器)检查byte[]中的值。看看OdbcDataReader

中实际存储的类型

使用SELECT *在性能方面存在问题。它还会让您rd[1]进行解释。如果列的顺序发生变化,您的代码可能会中断。使用rd["your_column_name"]访问值。截至目前,由于SELECT *Items数组中的非命名索引,我无法确定索引1是否正确。

答案 1 :(得分:0)

首先,为什么需要在MySql中存储图像?

为什么不在物理驱动器中?如果不是关键数据,请将其保存在物理驱动器中。

但是,这里是要检索的代码:

public byte [] getImage(int imageNumber)
{
        string strSql = "SELECT * FROM File";
        DataSet ds = new DataSet("Image");
        OdbcDataAdapter tempAP = new OdbcDataAdapter(strSql,this._objConn);
        OdbcCommandBuilder objCommand = new OdbcCommandBuilder(tempAP);
        tempAP.Fill(ds,"Table");

        try
        {
            this._objConn.Open();
            byte [] buffer = (byte [])ds.Tables["Table"].Rows[imageNumber]["Data"];
            return buffer;
        }
        catch{this._objConn.Close();return null;}
        finally{this._objConn.Close();}            
}

提供者: http://www.codeproject.com/Articles/6750/Storing-Images-in-MySQL-using-ASP-NET

用于物理驱动器 http://www.codeproject.com/Articles/2113/C-Photo-Album-Viewer