在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 []
的图像记录答案 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