Estou tentando recuperar uma imagem no carregamento de formulário usando o comando function, mas ele não carrega e recebo o erro "O parâmetro não é válido". Verifique onde estou errado no código, porque tentei depurar meu código por meio de pontos de interrupção e ele está me mostrando que o código está funcionando bem, mas em algum lugar a imagem não é recuperada do banco de dados para a caixa de imagem.
Aqui está o meu código:
public static Bitmap ByteToImage(byte[] blob)
{
MemoryStream mStream = new MemoryStream();
byte[] pData = blob;
mStream.Write(pData, 0, Convert.ToInt32(pData.Length));
Bitmap bm = new Bitmap(mStream, false);
mStream.Dispose();
return bm;
}
Recuperar imagem usando a Photoload
função:
public void photoLoad()
{
ConnectionDB cnn = new ConnectionDB();
string query1 = "select image from doctor_image where do='" + DoctorPanel.drUsername + "'";
try
{
cnn.Open();
MySqlDataReader row;
row = cnn.ExecuteReader(query1);
while (row.Read())
{
ImageByte = (Byte[])(row["image"]);
}
if (ImageByte != null)
{
// You need to convert it in bitmap to display the image
pictureBox1.Image = ByteToImage(ImageByte);
pictureBox1.Refresh();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Inserir no banco de dados
private void Button6_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
// image filters
open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
// display image in picture box
//pictureBox1.Image = new Bitmap(open.FileName);
pictureBox1.Image = Image.FromFile(open.FileName);
ConnectionDB cnn = new ConnectionDB();
cnn.Open();
string sql = "INSERT INTO doctor_image(image, do) VALUES('" + pictureBox1.Image + "','" + DoctorPanel.drUsername + "')";
int noofrows = cnn.ExecuteNonQuery(sql);
if (noofrows != -1)
{
MessageBox.Show("Photo uploaded");
}
else
{
MessageBox.Show("Data insert error");
}
}
}
Esta linha de código está errada:
string sql = "INSERT INTO doctor_image(image, do) VALUES('" + pictureBox1.Image + "','" + DoctorPanel.drUsername + "')";
Em primeiro lugar, você está usando a concatenação de strings para criar o SQL. Essa é uma fonte comum de problemas de segurança (especificamente, injeção SQL). Use os parâmetros.
Em segundo lugar, "'" + pictureBox1.Image + "','"
simplesmente produzirá uma string semelhante à 'System.Drawing.Bitmap'
que será inserida no seu banco de dados. Obviamente, essa não é uma imagem válida, e é por isso que você recebe a exceção "Parâmetro inválido" ao tentar carregá-la.
Parece que você deseja apenas inserir os bytes da imagem no seu banco de dados, que possui uma correção simples. Você nem precisa usar a Image
classe; basta ler os bytes do arquivo e carregá-los na tabela:
using (var cmd = new MySqlCommand(@"INSERT INTO doctor_image(image, do) VALUES(@image, @do);", cnn)
{
cmd.Parameters.AddWithValue("@image", File.ReadAllByes(open.FileName));
cmd.Parameters.AddWithValue("@do", DoctorPanel.drUsername);
cmd.ExecuteNonQuery();
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras