Jump to content

Inserir imagem em Base de Dados SQL


Recommended Posts

Posted (edited)

Boas enganei-me acima, é em MYSQL, Apenas tinha conseguido já fazer em sql

Boas pessoal estou com um problema, consegui inserir em sql server mas em mysql não consigo, é mesmo necessário inserir a imagem na base de dados, o meu código é o seguinte:

//converter imagem para bytes
 public static byte[] convertfoto(Image img)
 {
	 byte[] byteArray = new byte[0];
	 using (MemoryStream stream = new MemoryStream())
	 {
		 img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
		 stream.Close();
		 byteArray = stream.ToArray();
	 }
	 return byteArray;
 }
 //converter bytes para imagem
 public static Image byte2image(byte[] pic)
 {
	 MemoryStream ms = new MemoryStream(pic);
	 Image img = Image.FromStream(ms);
	 return img;
 }

A querie está direita.

MySqlParameter picparameter = new MySqlParameter();
		 picparameter.MySqlDbType = MySqlDbType.Binary;
		 picparameter.ParameterName = "Fotografia";
		 picparameter.Value = inserir.Foto;
		 MySqlCommand cmd = new MySqlCommand(querie.ToString(), cn);
		 cmd.Parameters.Add(new MySqlParameter("@DataDeNascimento", MySqlDbType.DateTime)).Value = inserir.DtNascimento;
		 cmd.Parameters.Add(picparameter);
		 cmd.ExecuteNonQuery();

PS: Já tentei BLOB

Cumprimentos...

Edited by sYnced
Posted (edited)

A parte de converter a imagem para byte[] e vice-versa parece-me ok.

Qual é o problema exacto? Não fica nada no campo?

Qual é o tipo de campo que tens na base de dados?

Edited by nelsonr
Posted

Só dá bit, byte binary, aliás bit dá erro, por norma usei binary mas ao converter de byte para imagem deu me um erro... Antes do cmd.ExecuteNonQuery();

Para sql server bastava por .image, aqui não tinha pus em binary que ia dar ao mesmo!

Posted

Nunca testei com MySQL, mas pelo que vejo aqui, o formato convem ser blob (tinyblob, blob, mediumblob ou longblob)

http://www.phpriot.com/articles/storing-images-in-mysql/3

Se o erro é ao converter dos dados lidos da base de dados, podes fazer um teste rapido.

Numa imagem pequena, antes de gravares vês o que tens dentro do byte[].

Depois lês e vês o que está no byte[]. Se for diferente é porque a parte da gravação/leitura não está bem.

Posted (edited)

São diferentes(dados), só me passa a posição 0...

public static byte[] SelectPicUser(ClienteGestao cli)
 {
	 object pic = new object();
	 MySqlConnection cn = new MySqlConnection(cs);
	 cn.Open();
	 string querie = "Select Fotografia from cliente where id="+cli.ID+"";
	 MySqlCommand cmd = new MySqlCommand(querie, cn);
	 cmd.ExecuteNonQuery();
	 pic = cmd.ExecuteScalar();
	 byte[] imagedata = new byte[0];
	 imagedata = (byte[]) pic;
	 return imagedata;
 }

Ando a ficar doido...

Edited by sYnced
  • 3 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.