从mysql保存并重试映像

本文关键字:重试 映像 保存 mysql | 更新日期: 2023-09-27 17:58:43

在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();
            }
        }

问题究竟出在哪里?图像是否保存不正确?它应该像保存到一个长Blob一样。图像的记录显示System。Byte[]

从mysql保存并重试映像

在尝试将第一个字段强制转换为byte[]之前,您应该能够检查(通过调试器)OdbcDataReader内部的值。查看OdbcDataReader 中实际存储的类型

使用SELECT *在性能方面存在问题。这也让您的rd[1]有待解释。如果列的顺序发生变化,代码可能会中断。使用rd["your_column_name"]访问这些值。到目前为止,由于SELECT *和对Items数组的未命名索引,我无法判断索引1是否正确。

首先,为什么需要在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