C# WPF Problem: Bild aus einer DB in Image laden

Sake_93

Newbie
Registriert
Aug. 2011
Beiträge
2
Hallo Leute!

Bin gerade dabei eine Programm zu schreiben womit man Bilder in einer DB abspeichern kann und dann diese auf Bedarf wieder ausgeben kann

So tue ich die Bilder in die DB laden:

Code:
 private void bild_hinzu(object sender, RoutedEventArgs e)
        {
            OpenFileDialog filedlg = new OpenFileDialog();
            filedlg.Title = "Bitte ein Bild aussuchen";
            filedlg.DefaultExt = "jpg";
            filedlg.FileOk += new System.ComponentModel.CancelEventHandler(filedlg_FileOK);
            filedlg.ShowDialog();
        }

 void filedlg_FileOK(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                string selfile = (sender as OpenFileDialog).FileName;
                MySqlCommand cmd = new MySqlCommand("INSERT INTO tblbild (ID,Bild) VALUES ('150',@Bild)", connect);
                String strPath = selfile;
                FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read);
                Byte[] bytBlobData = new byte[fs.Length];
                fs.Read(bytBlobData, 0, bytBlobData.Length);
                fs.Close();
                MySqlParameter prm = new MySqlParameter("@Bild", MySqlDbType.VarBinary, bytBlobData.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytBlobData);
                cmd.Parameters.Add(prm);
                
                cmd.ExecuteNonQuery();
                

            }

            catch { }
        }

Und soweit bin ich mit dem Ausgeben gekommen:

Code:
conn.Open();
            MySqlDataAdapter da = new MySqlDataAdapter("SELECT Bild from tblbild where ID ='150'", conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            conn.Close();
            byte[] content = (byte[])ds.Tables[0].Rows[0].ItemArray[0];
            MemoryStream stream = new MemoryStream(content);

Normalerweise würde ich in einer normalen Windows Form nur :
Code:
picturebox1.Image = Image.FromStream(stream);
hinschreiben müssen und das Bild würde ausgelesen werden. Nun hab ich im Internet nach möglichkeiten gesucht es umzuschreiben jedoch hab ich es bis jetzt noch nicht geschafft.

Frage: Weiß jemand wie ich die Bilder vll. anderes auslesen kann oder wie man es mit einem "Image" richtig macht?

mfg Sake_93

Jedoch gibt es in WPF die PictureBox nicht als PictureBox sondern als "Image".
 
Zuletzt bearbeitet:
Hallo,

habe mir den Beitrag nur ganz kurz angesehen.
Dabei sind mir zwei Sachen aufgefallen:

  1. MySqlDataAdapter da = new MySqlDataAdapter("SELCET Bild from tblbild where ID ='150'", conn);
  2. Normalerweiße
 
Hallo,

Ein Image in WPF braucht ein(e) Source. Dies kannst du zB erstellen, wenn du aus deinem Stream ein BitmapImage erstellst.

Siehe hier.

Hoffe, das hilft dir weiter.

EDIT: Hab meinen Code dazu wieder angefunden.
Ich hab das so gelöst (ist im Prinzip das gleiche wie der Link):
Code:
//System.IO.MemoryStream stream;

BitmapImage img = new BitmapImage();
img.BeginInit();
img.StreamSource = stream;
img.EndInit();

image.Source = img;

lg
 
Zuletzt bearbeitet:
Zurück
Oben